python - 如何控制matplotlib中图形线的宽度?

标签 python pandas matplotlib graph

我正在尝试使用以下数据在 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=number。请参阅https://matplotlib.org/examples/pylab_examples/set_and_get.html

如何获取重量并使其具有显着的宽度?

这取决于您的体重范围。如果它始终在 2 到 15 之间,我建议简单地将其除以 2,即:

linewidth=weight/2

如果您觉得这在美观上令人不快,请除以更大的数字,但这显然会减少您获得的线宽数量。

如何获取df2的权重?

鉴于您描述的 df2 和您显示的代码,keydf2id。所以你想要:

df2[df2['id'] == key]['weight']

把它们放在一起:

将 grp.plot 行替换为以下内容:

grp.plot(linestyle="solid", 
         linewidth=df2[df2['id'] == key]['weight'] / 2.0, 
         x = "x", y = "y", ax = ax, label = key)

(所有这些都是您添加了线宽条目的行。)

关于python - 如何控制matplotlib中图形线的宽度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45847016/

相关文章:

python - 如何克服python中的缩进错误?

python - 如何从另一个函数中拦截一个函数中的变量

python - 将重复的行标签转换为 Pandas 中的列标题

python - 使用 matplotlib 绘制 4D numpy 数据

python - asyncio 的默认调度程序何时公平?

python - Pandas 时间序列重新采样,分箱似乎关闭

Python pandas 数据框平均值和绘图值

python-3.x - 删除 Candlestick_ohlc 图表中两个日期之间的空白

python - 如何将结果值显示在轴框之外

python - 保存和读取二进制图像