我试图在matplotlib中使用以下数据绘制线图,x,属于同一id的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
如果有任何不清楚的地方,请告诉我。
答案 0 :(得分:1)
根据评论,您需要了解一些事项:
这很简单:linewidth=number
。见https://matplotlib.org/examples/pylab_examples/set_and_get.html
这取决于您的体重范围。如果它始终在2到15之间,我建议简单地将其除以2,即:
linewidth=weight/2
如果你发现这在美学上是不愉快的,除以更大的数字,虽然这显然会减少你得到的线宽数量。
df2
的重量?根据您描述的df2
和您展示的代码,key
是id
的{{1}}。所以你想要:
df2
使用以下内容替换您的grp.plot行:
df2[df2['id'] == key]['weight']
(所有这些都是您添加了线宽条目的行。)