python - Python matplotlib如何将颜色映射到饼图中的“x值”
问题描述
我有一个看起来像的数据框
df=pd.DataFrame({'product': [0,0,1,1,1,1,1,2,2,2], 'market': [1,2,1,2,5,6,7,1,6,7], 'value': [500,300,100,200,400,100,200,100,300,900]})
fig, axes = plt.subplots(nrows=1, ncols=3)
for m in range(3):
df.loc[df['product']==m].plot(ax=axes[m], kind='pie', y='value', figsize=(15,5))
如何将颜色图传递到绘图函数中,以便每个市场的颜色在所有 3 个饼图中都相同?如果这是不可能的,有没有人有任何其他建议如何实现这一点,也许是通过以一种半优雅的方式添加虚拟行?
笔记。我正在使用 py3.6 和 pandas 的最新版本
解决方案
您可以为不同的类别创建一个查找字典,并使用它为每个饼图创建一个颜色列表。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df=pd.DataFrame({'product': [0,0,1,1,1,1,1,2,2,2],
'market': [1,2,1,2,5,6,7,1,6,7],
'value': [500,300,100,200,400,100,200,100,300,900]})
cdict = dict(zip(np.unique(df["market"].values), plt.cm.tab10.colors))
fig, axes = plt.subplots(nrows=1, ncols=3)
for m in range(3):
data = df.loc[df['product']==m]
data.plot(ax=axes[m], kind='pie', y='value', figsize=(15,5),
colors=[cdict[v] for v in data["market"]])
plt.show()
推荐阅读
- typescript - 如果单元格在制表网格中有颜色,则选择的颜色不可见。有没有办法让选择的颜色可见?
- .net - Jmeter 5.4.1 - GUI 中的平均响应时间比非 GUI 更快
- docker - `docker build` 显示来自 `RUN` 的输出
- api - Onelogin SAML 断言验证因素与身份验证被拒绝
- javascript - 另一个 for 循环 JavaScript 中的 for 循环
- java - 在 docker-compose 和 POM 中传递参数
- r - 从分组数据的不同行中创建列
- javascript - 表单文本区域创建 URL
- postgresql - Postgres walwriter 和使用内存的后台编写器
- angular - 移除基于 Environment Nx Angular 的代码块