У меня есть приведенный ниже код, и мне интересно, могу ли я создать горизонтальную гистограмму, где полосы меняют цвет по горизонтали (в моем случае сверхурочно) в соответствии с заданной картой цветов непосредственно из объекта фрейма данных.
from matplotlib import pyplot as plt
from matplotlib import cm
import pandas as pd
import numpy as np
# generate dataframe
df = pd.DataFrame(np.random.randn(1000, 4), index=pd.date_range('1/1/2000', periods=ndays), columns=list('ABCD'))
df = df.cumsum()
# plot dataframe
df.plot(figsize=(10,5))
# TODO
# make a plot with four horizontal bars each for one column (A, B, C, D)
# the bars represent the time variation and thus should change colour according to the values in the ABCD columns mapped to cmap colour map
Я также привожу ниже временное решение с использованием точечной диаграммы для визуализации того, к чему я стремлюсь.
# this is what I would like plot to look like
# I use plt.scatter to show
fig = plt.figure(figsize=(15,2))
ax = fig.add_subplot(111)
cmap = cm.gnuplot
ax.scatter(x=df.index, y=[0]*df.A.shape[0], c=df.A, cmap=cmap)
ax.scatter(x=df.index, y=[1]*df.A.shape[0], c=df.B, cmap=cmap)
ax.scatter(x=df.index, y=[2]*df.A.shape[0], c=df.C, cmap=cmap)
cax = ax.scatter(x=df.index, y=[3]*df.A.shape[0], c=df.D, cmap=cmap)
# vertical color bar
clim = cax.get_clim()
cbar = fig.colorbar(cax, ticks=[min(clim),np.mean(clim),max(clim)], orientation='vertical')
cbar.ax.set_xticklabels(['Low', 'Medium', 'High'])
Примечание. Вопрос не в диаграмме рассеяния, а в том, как получить результат с моим текущим решением непосредственно из объекта фрейма данных.
df.plot(kind="mycustomwishlistplot", x="x", y="y")
, которого, конечно же, не существует. - person ImportanceOfBeingErnest   schedule 29.03.2017