Можно ли сгенерировать диаграмму тепловой карты с помощью matplotlib, используя Pandas Dataframe? - PullRequest
0 голосов
/ 19 июня 2020

У меня есть Pandas dataframe данных OHL C, которые я обычно использую для создания свечного графика, с ценой на оси Y и временем на оси X. Просто из любопытства сегодня я пытался увидеть, могу ли я вместо создания диаграммы свечей использовать тот же фрейм данных для создания диаграммы тепловой карты.

Конечно, все значения тепловой карты будут быть 0,0, поэтому тепловая карта будет пустой, но я хочу проверить, могу ли я построить диаграмму с осями X и Y и смогу ли я позже заполнить значения на тепловой карте, используя эти значения XY.

Вот образец pandas фрейма данных:

                  Date           Open           High            Low          Close         Volume
0  2020-06-19 10:40:00  9310.57000000  9316.87000000  9310.52000000  9314.71000000   109.57386800
1  2020-06-19 10:45:00  9314.71000000  9324.21000000  9306.56000000  9320.25000000   129.81644400
2  2020-06-19 10:50:00  9320.25000000  9323.86000000  9314.26000000  9317.37000000   112.90924000
3  2020-06-19 10:55:00  9317.31000000  9319.02000000  9310.05000000  9314.79000000   157.48792800
4  2020-06-19 11:00:00  9314.80000000  9342.17000000  9314.80000000  9334.07000000   301.98549100
5  2020-06-19 11:05:00  9334.07000000  9355.90000000  9334.06000000  9343.76000000   624.54143900
6  2020-06-19 11:10:00  9343.77000000  9353.36000000  9336.38000000  9345.71000000   153.59121000
7  2020-06-19 11:15:00  9346.72000000  9438.30000000  9346.72000000  9398.82000000  1459.34823300
8  2020-06-19 11:20:00  9398.83000000  9406.86000000  9385.25000000  9394.99000000   307.34372900
9  2020-06-19 11:25:00  9395.00000000  9397.81000000  9377.06000000  9386.17000000   215.67805500
10 2020-06-19 11:30:00  9386.18000000  9396.84000000  9351.88000000  9365.08000000   324.14550500
11 2020-06-19 11:35:00  9367.15000000  9379.82000000  9358.21000000  9371.96000000   188.80223900
12 2020-06-19 11:40:00  9371.97000000  9380.00000000  9368.22000000  9371.03000000    95.10065000
13 2020-06-19 11:45:00  9370.24000000  9378.87000000  9358.00000000  9358.86000000   111.93088900
14 2020-06-19 11:50:00  9359.32000000  9367.78000000  9342.52000000  9351.47000000   273.59986200
15 2020-06-19 11:55:00  9351.47000000  9365.68000000  9351.47000000  9363.57000000    77.12252700
16 2020-06-19 12:00:00  9363.82000000  9373.21000000  9355.77000000  9361.27000000   166.72208600
17 2020-06-19 12:05:00  9361.28000000  9381.41000000  9361.27000000  9371.41000000    98.49074300
18 2020-06-19 12:10:00  9371.41000000  9378.96000000  9363.94000000  9373.19000000   100.48336700
19 2020-06-19 12:15:00  9373.14000000  9376.86000000  9361.27000000  9362.64000000    73.68976300
20 2020-06-19 12:20:00  9362.63000000  9376.27000000  9358.01000000  9371.64000000    92.10625000
21 2020-06-19 12:25:00  9371.64000000  9371.64000000  9362.10000000  9366.00000000    61.70933400
22 2020-06-19 12:30:00  9366.00000000  9377.15000000  9365.99000000  9376.50000000    74.94230300
23 2020-06-19 12:35:00  9376.50000000  9381.93000000  9367.90000000  9370.82000000   138.87545100
24 2020-06-19 12:40:00  9370.48000000  9375.52000000  9363.57000000  9369.87000000   131.79038700
25 2020-06-19 12:45:00  9369.88000000  9385.96000000  9361.52000000  9381.88000000   138.91011300
26 2020-06-19 12:50:00  9380.52000000  9394.99000000  9380.46000000  9384.19000000   269.31494300
27 2020-06-19 12:55:00  9383.80000000  9392.88000000  9378.42000000  9391.73000000   109.40249800
28 2020-06-19 13:00:00  9391.69000000  9400.00000000  9389.98000000  9397.36000000   198.99596400
29 2020-06-19 13:05:01  9397.40000000  9403.00000000  9397.40000000  9397.60000000    58.66688600

А вот пример тепловой карты Matplotlib из документов MPL:

import numpy as np
import matplotlib
import matplotlib.pyplot as plt
# sphinx_gallery_thumbnail_number = 2

vegetables = ["cucumber", "tomato", "lettuce", "asparagus",
              "potato", "wheat", "barley"]
farmers = ["Farmer Joe", "Upland Bros.", "Smith Gardening",
           "Agrifun", "Organiculture", "BioGoods Ltd.", "Cornylee Corp."]

harvest = np.array([[0.8, 2.4, 2.5, 3.9, 0.0, 4.0, 0.0],
                    [2.4, 0.0, 4.0, 1.0, 2.7, 0.0, 0.0],
                    [1.1, 2.4, 0.8, 4.3, 1.9, 4.4, 0.0],
                    [0.6, 0.0, 0.3, 0.0, 3.1, 0.0, 0.0],
                    [0.7, 1.7, 0.6, 2.6, 2.2, 6.2, 0.0],
                    [1.3, 1.2, 0.0, 0.0, 0.0, 3.2, 5.1],
                    [0.1, 2.0, 0.0, 1.4, 0.0, 1.9, 6.3]])


fig, ax = plt.subplots()
im = ax.imshow(harvest)

# We want to show all ticks...
ax.set_xticks(np.arange(len(farmers)))
ax.set_yticks(np.arange(len(vegetables)))
# ... and label them with the respective list entries
ax.set_xticklabels(farmers)
ax.set_yticklabels(vegetables)

# Rotate the tick labels and set their alignment.
plt.setp(ax.get_xticklabels(), rotation=45, ha="right",
         rotation_mode="anchor")

# Loop over data dimensions and create text annotations.
for i in range(len(vegetables)):
for j in range(len(farmers)):
    text = ax.text(j, i, harvest[i, j],
                   ha="center", va="center", color="w")

ax.set_title("Harvest of local farmers (in tons/year)")
fig.tight_layout()
plt.show()

1 Ответ

1 голос
/ 19 июня 2020

тепловая карта = np.zeros ((1, len (df),))

plt.imshow(heatmap)
plt.ylabel('price')
plt.xticks(range(len(df)));
plt.gca().set_xticklabels(df['Date'], rotation=90);

enter image description here

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