Создание собственного сюжета - PullRequest
0 голосов
/ 30 января 2020

Мне нужно создать собственный график (см. Изображение), где каждый круг является переменной, а его цвет представляет значение этого. Мне также нужна некоторая корреляция между значением переменной и ее цветом, поэтому, если я изменю значение переменной, он также изменит цвет ее круга на графике. Я понятия не имею, где я могу это узнать. https://i.stack.imgur.com/9PnZq.png

1 Ответ

0 голосов
/ 31 января 2020

Вот пример раскраски кругов в зависимости от некоторого значения. Код создает списки из 20 позиций x и y, а также список из 20 случайных значений от -1 до 1. В зависимости от их значения круги окрашиваются в красный цвет от желтого до sh до зеленого.

from matplotlib import pyplot as plt
import random

x = [i // 4 for i in range(20)]
y = [i % 4 for i in range(20)]
z = [random.uniform(-1, 1) for i in range(20)]

# create a scatter plot for the given x,y positions, make them quite large, color them
# using z and the Red-Yellow-Green color map, give them a black border 

plt.scatter(x, y, s=400, c=z, cmap='RdYlGn', ls='-', edgecolors='black')

plt.colorbar() # add a colorbar to show how the values correspond to colors

plt.xlim(-0.9, 4.9) # because of very large scatter dots, the default limits are too narrow
plt.ylim(-0.9, 3.9)

plt.show() # display the plot on the screen

resulting image

Вот возможный подход к построению сетки 12x4 с 3 значениями:

from matplotlib import pyplot as plt
import random

num_columns = 12
num_rows = 4
num_values = 3
x = [[j for j in range(num_columns)] for i in range(num_rows)]
y = [[i for j in range(num_columns)] for i in range(num_rows)]
z = [[random.randint(1, num_values) for j in range(num_columns)] for i in range(num_rows)]

plt.scatter(x, y, s=400, c=z, cmap='RdYlGn', ls='-', edgecolors='black')

cbar = plt.colorbar(ticks=range(1, num_values + 1))
cbar.ax.set_yticklabels([f'Value {v}' for v in range(1, num_values + 1)])

plt.xlim(-0.5, num_columns - 0.5)
plt.ylim(-0.5, num_rows - 0.5)
plt.xticks(range(num_columns))
plt.yticks(range(num_rows))

plt.show()

12x4 plot

...