我正在使用matplotlib在一个图上绘制20条不同的线.我使用for循环绘制并用其键标记每一行,然后使用图例功能
for key in dict.keys():
plot(x,dict[key], label = key)
graph.legend()
Run Code Online (Sandbox Code Playgroud)
但是使用这种方式,图表在图例中重复了很多颜色.有没有办法确保使用matplotlib和超过20行为每条线分配一个独特的颜色?
谢谢
我有一个线图,我想用箭头而不是线条绘制.也就是说,连续点对之间的线应该是从第一点到第二点的箭头.
我知道这个arrow功能,但这似乎只做单独的箭头.在我尝试使用它来完成整个情节之前,有没有更好的方法呢?
我试图用Python创建一个色轮,最好使用Matplotlib.以下工作正常:
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
xval = np.arange(0, 2*pi, 0.01)
yval = np.ones_like(xval)
colormap = plt.get_cmap('hsv')
norm = mpl.colors.Normalize(0.0, 2*np.pi)
ax = plt.subplot(1, 1, 1, polar=True)
ax.scatter(xval, yval, c=xval, s=300, cmap=colormap, norm=norm, linewidths=0)
ax.set_yticks([])
Run Code Online (Sandbox Code Playgroud)
然而,这种尝试有两个严重的缺点.
首先,当将结果图形保存为矢量(figure_1.svg)时,色轮包含(如预期)621种不同的形状,对应于绘制的不同(x,y)值.虽然结果看起来像一个圆圈,但事实并非如此.我更倾向于使用一个实际的圆,由几个路径点和它们之间的贝塞尔曲线定义,如例如matplotlib.patches.Circle.这在我看来是"正确"的方式,结果看起来更好(没有条带,更好的渐变,更好的抗锯齿).
第二个(相关地),最终绘制的标记(前面的最后几个2*pi)与前几个重叠.在像素渲染中很难看到,但如果你放大基于矢量的渲染,你可以清楚地看到最后一张光盘与前几张光盘重叠.
我尝试使用不同的标记(.或|),但没有一个绕过第二个问题.
底线:我可以在Python/Matplotlib中绘制一个圆圈,它以适当的矢量/贝塞尔曲线方式定义,并且具有根据色彩图定义的边缘颜色(或者,失败,任意颜色渐变)?
我想在Matplotlib中显示一组xy数据,以指示特定路径.理想情况下,linestyle会被修改为使用类似箭头的补丁.我创建了一个模型,如下所示(使用Omnigraphsketcher).好像我应该能够覆盖普通的一个linestyle声明('-','--',':'等),以这种效果.
请注意,我不想简单地用一个箭头连接每个数据点---实际数据点不是均匀间隔的,我需要一致的箭头间距.

与前一个我的问题类似,我想控制使用matplotlib绘制的线条的capstyle.但是,我有非常多的行,并且除了行集合之外的任何绘图都需要太长时间.是否有任何变通方法以通用方式控制行集合中的行的capstyle(或者,绘制大量Line2D行的超快速方式).例如,我尝试过使用matplotlib rc设置:
import matplotlib as mpl
mpl.rcParams['lines.solid_capstyle'] = 'round'
mpl.rcParams['lines.solid_joinstyle'] = 'round'
Run Code Online (Sandbox Code Playgroud)
但这似乎没有任何影响.来自docstring collections.py:
这些类并不意味着像它们的单个元素一样灵活(例如,您可能无法选择所有的线条样式),但它们对于常见用例来说是快速的(例如,大量的实线选择)
这解释了为什么我似乎无法控制各种参数,但我仍然想要这样做!我已经看过AGG后端的代码了(_backend_agg.cpp不是我真的理解它),看来line_cap和line_join是由gc.cap和控制的gc.join,其中gc来自GCAgg类.有谁知道如何从Python控制这个?我在这里问正确的问题吗?也许这是控制这些参数的更简单方法?
非常感谢任何帮助......我非常渴望得到这个工作,所以即使是疯狂的黑客也欢迎!
谢谢,
卡森