python - 使用 pandas.Dataframe.plot 将条形图颜色调整为红色(负)和绿色(正)
问题描述
我正在使用 pd.DataFrame.plot() 可视化多个品牌的 %YoY 变化。我不确定如何访问每个单独的子图并将值 >=0 设置为绿色,<0 设置为红色。我想避免在 fig, ax. 中拆分代码。想知道是否有办法将其包含在 df.plot() 的参数中。
data= {'A': [np.nan, -0.5, 0.5],
'B': [np.nan, 0.3, -0.3],
'C': [np.nan, -0.7, 0.7],
'D': [np.nan, -0.1, 1]}
df = pd.DataFrame(data=data, index=['2016', '2017', '2018'])`
df.plot(kind='bar', subplots=True, sharey=True, layout=(2,2), legend=False,
grid=False, colormap='RdBu')
我试过使用颜色图,但它不会将各个条设置为不同的颜色,而是将每个子图设置为不同的颜色。我确定我错过了一些东西。任何帮助表示赞赏。
解决方案
您可以使用以下策略:
matplotlib
使用using创建带有子图的图形对象sharey=True
- 循环遍历 DataFrame 列并将绿色/红色颜色分配给此答案中所示的值
- 传递给定的子图以使用绘制特定列
ax=ax
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
fig, axes = plt.subplots(ncols=3, sharey=True)
data= {'A': [np.nan, -0.5, 0.5],
'B': [np.nan, 0.3, -0.3],
'C': [np.nan, -0.7, 0.7]}
df = pd.DataFrame(data=data, index=['2016', '2017', '2018'])
for ax, col in zip(axes, df.columns):
df[col].plot(kind='bar', color=(df[col] > 0).map({True: 'g', False: 'r'}), ax=ax)
ax.set_title(col)
plt.show()
推荐阅读
- reactjs - Electron-TypeScript-React 应用程序中本机模块的接口
- spring - 如何使用 Oracle DB 获取 PreparedStatement 的实际 SQL 查询?
- ide - 在 Code::Blocks 中加载由不同的多个文件组成的面向对象程序
- bash - bash 测试机器中的所有以太网卡是否都有链接
- api - DPD API 标签格式
- javascript - Webpack 未捕获错误:模块解析失败:意外令牌
- html - 如何使css按钮的定位居中?
- angular - 电子/电容器/控制台:第 1 行 - 消息:错误 [对象对象]
- javascript - H13 desc="连接关闭无响应"节点
- reactjs - 是否可以在不使用状态的情况下动态呈现函数的返回值?