python - 基于数据框列的pyplot图中的线条粗细
问题描述
首先,数据框:
日期 | 类别 | 12MKG | 数量 |
---|---|---|---|
202001 | 猫1 | 0.8947368 | 38.0 |
202002 | 猫1 | 0.8695652 | 46.0 |
202003 | 猫1 | 0.8913044 | 46.0 |
202004 | 猫1 | 0.88372093 | 43.0 |
202005 | 猫1 | 0.8913044 | 46.0 |
202006 | 猫1 | 0.8888889 | 45.0 |
202007 | 猫1 | 0.8780488 | 41.0 |
202008 | 猫1 | 0.925 | 40.0 |
202009 | 猫1 | 0.8684211 | 38.0 |
202010 | 猫1 | 0.76744187 | 43.0 |
202011 | 猫1 | 0.7111111 | 45.0 |
202012 | 猫1 | 0.6888889 | 45.0 |
202101 | 猫1 | 0.7083333 | 48.0 |
202102 | 猫1 | 0.73333335 | 45.0 |
202103 | 猫1 | 0.74 | 50.0 |
202104 | 猫1 | 0.71428573 | 56.0 |
202105 | 猫1 | 0.7241379 | 58.0 |
202106 | 猫1 | 0.7258065 | 62.0 |
202107 | 猫1 | 0.71875 | 64.0 |
202001 | 猫2 | 0.6244344 | 221.0 |
202002 | 猫2 | 0.6136364 | 220.0 |
202003 | 猫2 | 0.61085975 | 221.0 |
202004 | 猫2 | 0.6028708 | 209.0 |
202005 | 猫2 | 0.63013697 | 219.0 |
202006 | 猫2 | 0.6034483 | 232.0 |
202007 | 猫2 | 0.5914894 | 235.0 |
202008 | 猫2 | 0.59322035 | 236.0 |
202009 | 猫2 | 0.6008584 | 233.0 |
202010 | 猫2 | 0.5903614 | 249.0 |
202011 | 猫2 | 0.5836735 | 245.0 |
202012 | 猫2 | 0.57377046 | 244.0 |
202101 | 猫2 | 0.5795918 | 245.0 |
202102 | 猫2 | 0.56666666 | 270.0 |
202103 | 猫2 | 0.557971 | 276.0 |
202104 | 猫2 | 0.548951 | 286.0 |
202105 | 猫2 | 0.5270758 | 277.0 |
202106 | 猫2 | 0.53985506 | 276.0 |
202107 | 猫2 | 0.53488374 | 258.0 |
202001 | 三类 | 0.426 | 500.0 |
202002 | 三类 | 0.40963855 | 498.0 |
202003 | 三类 | 0.40365112 | 493.0 |
202004 | 三类 | 0.41129032 | 496.0 |
202005 | 三类 | 0.4144869 | 497.0 |
202006 | 三类 | 0.4 | 500.0 |
202007 | 三类 | 0.39478958 | 499.0 |
202008 | 三类 | 0.4137255 | 510.0 |
202009 | 三类 | 0.4035433 | 508.0 |
我想创建一个折线图。我想要每个类别一行,在 x 轴上我想要日期,在 y 轴上想要 12MKG。我还希望每条线都有不同的颜色,这是我迄今为止所管理的(在@Piotr Nowakowski 的支持下)。
import matplotlib.pylab as pl
import matplotlib.pyplot as plt
labels = set(df['categorie'].values)
colors = pl.cm.jet(np.linspace(0,1,len(labels)))
for key, color in zip(labels, range(len(labels))):
data_x = df.loc[df['categorie']==key]['date']
data_y = df.loc[df['categorie']==key]['12MKG']
plt.plot(data_x, data_y, color=colors[color], label=key)
plt.legend()
plt.show()
现在我希望图中的线条具有不同的粗细,其中粗细随着数量列的增加而增加。线条粗细可以根据每个日期的数量变化,也可以根据最后一个数量值每条线一个粗细变化,在这种情况下基于日期 == 202107。
解决方案
我想出了这样的事情:
import matplotlib.pylab as pl
import matplotlib.pyplot as plt
labels = set(df['categorie'].values)
colors = pl.cm.jet(np.linspace(0,1,len(labels)))
width_lines = df.amount.values
for key, color, width in zip(labels, range(len(labels)), width_lines):
data_x = df.loc[df['categorie']==key]['date']
data_y = df.loc[df['categorie']==key]['12MKG']
width = df.loc[df['categorie']==key]['amount']
width = sum(width)
plt.plot(data_x, data_y, color=colors[color], label=key, linewidth=width/100)
plt.legend()
plt.show()
问题是我不确定金额值的范围是多少。如果简单除法不符合您的情况,您可以尝试先聚合所有值,然后调整范围。
推荐阅读
- json - 尝试从 tkinter python 刷新 ScrolledText 和组合框
- javascript - 当循环内有异步调用时如何保持代码同步
- undertow - 为什么 JMX 显示 XNIO ConnectionCount -1?
- json - 在keras文本分类模型中预测时如何循环
- firebase - 使用 Auth 和 firestore 依赖项获取错误
- reactjs - 将 React 组件类实例传递给子组件以访问父组件的变量和方法是否安全?
- fortran - 英特尔编译器未定义对符号“for_inquire”的引用
- javascript - 为自定义 HTML 元素创建高度和宽度属性
- ffmpeg - FFMPEG - 剪辑视频导致剪辑时间更长
- python - 将 csv 文件转换为 json,浮点值周围没有引号