Как изменить значения цветовой шкалы, не меняя тепловую карту в python matplotlib? - PullRequest
0 голосов
/ 21 января 2020

У меня есть плавкий предохранитель тепловой карты к диаграмме рассеяния, и я хочу изменить значение тиков цветовой шкалы. Цветная полоса принимает значение тепловой карты (от 0 до 1100), но я хочу иметь цветную полосу со значениями температуры (6,33). Как я могу сделать это, не меняя внешний вид тепловой карты. Я пытаюсь использовать clim, но это меняет внешний вид тепловой карты. Вот код:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

df = pd.read_csv("data/forestfires.csv")

x_number_list = df.X.tolist()
y_number_list = df.Y.tolist()
x_number_list = np.array(x_number_list)
y_number_list = np.array(y_number_list)

area_number_list = df.area.tolist()
area_number_list = [int(round(x+1,0)) for x in area_number_list]
temperature_number_list = df.temp.tolist()
temperature_number_list = np.array(temperature_number_list)

heatmap, xedges, yedges = np.histogram2d(y_number_list, x_number_list, weights=temperature_number_list)
fig, ax1 = plt.subplots(figsize=(7,7))
im = ax1.imshow(heatmap, interpolation='bicubic', cmap='hot', origin='lower') #bicubic
ax1.scatter(x_number_list, y_number_list, s=area_number_list, color=(157/255, 173/255, 245/255, 0.9))
ax1.set_ylim(y_number_list.min()-0.5, y_number_list.max()+0.5)
ax1.set_xlim(x_number_list.min()-0.5, x_number_list.max()+0.5)

cb = plt.colorbar(im, ax=ax1, shrink=0.73)
#im.set_clim(temperature_number_list.min(), temperature_number_list.max())

plt.show()

и вот результат:

enter image description here

Когда я использую clim, im.set_clim(temperature_number_list.min(), temperature_number_list.max()) я получаю это результат (это результат, который я НЕ хочу):

enter image description here

Ответы [ 2 ]

1 голос
/ 21 января 2020

Я нашел решение, оно сложное, но если у вас есть какой-то другой вариант, который лучше моего, я оставлю эту топику c открытой.

Я создаю поддельную тепловую карту с тем же размером, что и первый, но я поместил свой диапазон в поддельную карту тепла. так вот код:

x_number_list = df.X.tolist()
y_number_list = df.Y.tolist()
x_number_list = np.array(x_number_list)
y_number_list = np.array(y_number_list)

area_number_list = df.area.tolist()
area_number_list = [int(round(x+1,0)) for x in area_number_list]
temperature_number_list = df.temp.tolist()
temperature_number_list = np.array(temperature_number_list)

heatmap, xedges, yedges = np.histogram2d(y_number_list, x_number_list, weights=temperature_number_list)

#create fake heatmap
colorbar_parameter_by_temperature = []
for i in range(len(heatmap)):
    colorbar_parameter_by_temperature.append([0]*len(heatmap[0]))
    colorbar_parameter_by_temperature[i][0]=temperature_number_list.max()
    colorbar_parameter_by_temperature[i][1]=temperature_number_list.min()

fig, ax1 = plt.subplots(figsize=(7,7))
#im = ax1.imshow(heatmap, interpolation='bicubic', cmap='hot', origin='lower') #bicubic
im2 = ax1.imshow(heatmap2, interpolation='spline16', cmap='hot', origin='lower')
im = ax1.imshow(heatmap, interpolation='spline16', cmap='hot', origin='lower') 
ax1.scatter(x_number_list, y_number_list, s=area_number_list, color=(157/255, 173/255, 245/255, 0.9))
ax1.set_ylim(y_number_list.min()-0.5, y_number_list.max()+0.5)
ax1.set_xlim(x_number_list.min()-0.5, x_number_list.max()+0.5)

cb = plt.colorbar(im2, ax=ax1, shrink=0.73)

plt.show()

вот результат:

[[33.3, 2.2, 0, 0, 0, 0, 0, 0, 0, 0], [33.3, 2.2, 0, 0, 0, 0, 0, 0, 0, 0], [33.3, 2.2, 0, 0, 0, 0, 0, 0, 0, 0], [33.3, 2.2, 0, 0, 0, 0, 0, 0, 0, 0], [33.3, 2.2, 0, 0, 0, 0, 0, 0, 0, 0], [33.3, 2.2, 0, 0, 0, 0, 0, 0, 0, 0], [33.3, 2.2, 0, 0, 0, 0, 0, 0, 0, 0], [33.3, 2.2, 0, 0, 0, 0, 0, 0, 0, 0], [33.3, 2.2, 0, 0, 0, 0, 0, 0, 0, 0], [33.3, 2.2, 0, 0, 0, 0, 0, 0, 0, 0]]

enter image description here

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

Попробуйте

plt.clim(6,33)

, чтобы установить пределы цветовой шкалы от 6 до 33

В вашем случае это будет

cb = plt.colorbar(im, ax=ax1, shrink=0.73)
cb = plt.clim(6,33)

plt.show()

Надеюсь, это поможет. Это никак не должно влиять на внешний вид тепловой карты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...