【发布时间】:2018-02-01 11:23:09
【问题描述】:
我正在尝试使用以下数据在 matplotlib 中绘制折线图,属于同一 id 的 x,y 点是一行,因此下面的 df 中有 3 行。
id x y
0 1 0.50 0.0
1 1 1.00 0.3
2 1 1.50 0.5
4 1 2.00 0.7
5 2 0.20 0.0
6 2 1.00 0.8
7 2 1.50 1.0
8 2 2.00 1.2
9 2 3.50 2.0
10 3 0.10 0.0
11 3 1.10 0.5
12 3 3.55 2.2
可以用下面的代码简单地绘制出来:
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib notebook
fig, ax = plt.subplots(figsize=(12,8))
cmap = plt.cm.get_cmap("viridis")
groups = df.groupby("id")
ngroups = len(groups)
for i1, (key, grp) in enumerate(groups):
grp.plot(linestyle="solid", x = "x", y = "y", ax = ax, label = key)
plt.show()
但是,我有另一个数据框 df2,其中给出了每个 id 的权重,我希望找到一种方法来根据其权重控制每条线的粗细,权重越大,越粗行。我怎样才能做到这一点?另外,线条的粗细和宽度之间会遵循什么关系?
id weight
0 1 5
1 2 15
2 3 2
如果有什么不清楚的地方请告诉我。
【问题讨论】:
-
linewidth="foo" 然后探索并查看您要将 foo 设置为什么。很有可能,你想将你的体重调整到 1 到 7 之间——远远超出这个范围是非常巨大的。你如何做到这一点完全取决于你的体重范围。
-
好吧,我想实际的问题还不清楚。您描述了任务,但没有描述问题。你有没有尝试过什么?结果是什么?它在多大程度上不起作用?你是在什么时候卡住的?
-
@ScottMermelstein 请你举个例子来解释一下,如果我的体重范围从 2 到 15,那么各自的线宽如何依赖它?
-
如果您的体重在 2 到 15 之间,请尝试
linewidth=str(weight/2)。那么你的线宽会在 1 到 7.5 之间变化。 -
@ScottMermelstein 谢谢,但能否请您说明如何在每个“id”的代码中包含“linewidth”。
标签: python pandas matplotlib graph