我想在matplotlib中将标签绘制在线图的一条线上。
最小示例
#!/usr/bin/env python
import numpy as np
import seaborn as sns
sns.set_style("whitegrid")
sns.set_palette(sns.color_palette("Greens", 8))
from scipy.ndimage.filters import gaussian_filter1d
for i in range(8):
# Create data
y = np.roll(np.cumsum(np.random.randn(1000, 1)),
np.random.randint(0, 1000))
y = gaussian_filter1d(y, 10)
sns.plt.plot(y, label=str(i))
sns.plt.legend()
sns.plt.show()
字符串
生成
的数据
相反,我更喜欢像
的
2条答案
按热度按时间rwqw0loc1#
也许有点古怪,但这能解决你的问题吗?
字符串
下面是我得到的结果:
x1c 0d1x的数据
**编辑:**我又想了想,想出了一个解决方案,它会自动尝试为标签找到最佳位置,以避免标签被定位在x值处,两条线彼此非常接近(例如,这可能会导致标签被定位在x值处)。导致标签之间的重叠):
型
此解决方案的示例输出(注意标签的x位置如何不再完全相同):
如果想要避免使用
scipy.interpolate.interp1d
,可以考虑这样的解决方案,即对于给定的线A的x值,找到最接近的线B的x值。我认为这可能是有问题的,虽然如果线使用非常不同和/或稀疏的网格?tktrz96b2#
这个问题已经很老了,但你可以用matplotlib-labellines包来做:
字符串