gpt4 book ai didi

Python:如何制作具有逐渐变化的可变线宽的绘图?

转载 作者:行者123 更新时间:2023-11-30 22:45:07 25 4
gpt4 key购买 nike

我有以下代码,它绘制了可变线宽的图:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection
x = np.array(range(6))
y = [10, 15,10, 8, 13, 20]
widths = [1, 5,3, 8, 1, 2]
points = np.array([x, y]).T.reshape(-1, 1, 2)
segments = np.concatenate([points[:-1], points[1:]], axis=1)
lc = LineCollection(segments, linewidths=widths,color='blue')
fig,a = plt.subplots()
a.add_collection(lc)
a.set_xlim(0,7)
a.set_ylim(0,25)
fig.show()

我想平滑线条粗细之间的过渡,以便变化是渐进的并且看起来不错。我目前正在使用 Matplotlib,但它不一定是(如果可行的话,将使用 Seaborn 等)。有谁知道该怎么做吗?

最佳答案

另一种选择是使用多边形而不是线段。不幸的是,我不知道如何将线段的宽度(以点为单位)转换为数据坐标。在这里,我手动调整了宽度以尝试匹配所需的结果。

fig, ax = plt.subplots()
ax.set_xlim((0,5))
ax.set_ylim((0,25))

new_w = np.array(widths)/5. # <<< change according to your needs
# FIXME: this should probably be done using some sort of affine
# transformation already build-in in matplotlib, but I don't know how

for i in range(len(x)-1):
c = [[x[i], y[i]+new_w[i]/2.],
[x[i+1], y[i+1]+new_w[i+1]/2.],
[x[i+1], y[i+1]-new_w[i+1]/2.],
[x[i], y[i]-new_w[i]/2.]
]
p = matplotlib.patches.Polygon(c)
ax.add_patch(p)

plt.show()

enter image description here

关于Python:如何制作具有逐渐变化的可变线宽的绘图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41293653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com