python - 基于 Dataframe 中的值的颜色条形图
问题描述
我绘制了一个堆积条形图(参见此处:https ://imgur.com/a/ESJeHuF ),由下面的数据框组成。
condition1 condition2 condition3
timestamp
2019-10-30 01:41:43 1.0 4.0 0.0
2019-10-30 01:50:11 1.0 2.0 4.0
2019-10-30 01:50:59 1.0 2.0 4.0
2019-10-30 01:51:36 1.0 2.0 4.0
2019-10-30 01:52:27 1.0 3.0 4.0
2019-10-30 01:53:10 2.0 4.0 0.0
2019-10-31 02:25:14 5.0 0.0 0.0
2019-10-31 04:15:54 5.0 0.0 0.0
我希望条形图中的颜色通过此颜色列表与数据框中的相应值匹配:
color_list = ['r', 'g', 'b', 'm', 'k', 'k']
(例如,如果第 2 个到最后一个时间步的值为 5,则将堆积条形图的段着色为'k'
,并为堆积条形图列的所有段重复该行为。
下面的代码绘制了堆叠的条形图,但是颜色错误(上面的链接显示了这一点)。它仅将前三种颜色分配给所有值,其中 Dataframe 中有更多对应的颜色/值。正确的绘图应该在 x 轴上有时间戳,并且每个条件的条形段都有正确的颜色。
fig = plt.figure()
ax = fig.add_subplot(111)
df.plot.bar(stacked=True, rot=1, legend=False, ax=fig.gca(), colors=color_list)
我将不胜感激任何帮助,在此先感谢您。
解决方案
我不知道颜色的选择对你来说有多重要。我刚刚找到了一个似乎可以解决您的问题的解决方案,唯一的“但是”是如果您接受其中一种可用的颜色模式,开发会更容易。另外,如果您必须手动制作颜色图,您可以从 matplotlib.colors 中找到带有 LinearSegmentedColormap 的示例。
编码:
import matplotlib.pyplot as plt
from matplotlib.cm import ScalarMappable
data_color = [0.,1.,2.,3.,4.,5.] #data range from conditions columns
data_color = [x / max(data_color) for x in data_color]
custom_map = plt.cm.get_cmap('Accent') #one of the color schemas stored
custom = custom_map(data_color) #mapping the color info to the variable custom
fig = plt.figure()
ax = fig.add_subplot(111)
df.plot.bar(stacked=True, rot=1, legend=False, ax=fig.gca(), color=custom)
plt.show()
显示器:
推荐阅读
- azure - GetAuthenticationCookie 返回“值不能为空。参数名称:cookieHeader”的 SharePoint Online 问题
- laravel - 在laravel中未定义路线[员工]?
- java - JPA getResultList - 如何从响应中获取价值?
- javascript - 将多个 DataTable 的行从一个刀片传递到 admin.blade
- sql - 是否所有关系数据库都具有相同的语法
- svn - 如何在命令提示符下使用 svn:externals
- php - CakePHP 和 MySQL 获取记录:一次少量或连续数百条
- pandas - 在数据系列上应用 lower() 方法时,pandas 应用地图函数抛出错误
- python - 我需要对 catboost 的源代码进行哪些更改才能将 max_depth 增加到 16 以上?
- angular-universal - 在导入 AuthService 并在 OAuth 配置中指定 redirectUri 时尝试在 SSR 期间访问 Spartacus 页面时出错