我有以下matplotlib
片段:
fig, ax = plt.subplots(figsize=(6,6))
values = np.random.normal(loc=0, scale=1, size=10)
ax.plot(range(10), values, 'r^', markersize=15, alpha=0.4);
产
按计划进行。
我想让这条线看不见的地方,它与点重叠,这样点看起来更多的连接线,而不是躺在线的顶部。这样做是有可能的,要么让线在重叠的地方不可见,要么创建一个新的线条对象来链接这些点,而不是跟踪它们?
为了明确起见,我不希望删除整条线,只希望删除与点重叠的部分。
发布于 2018-03-22 10:36:10
一般来说,很难让线停在标记的边缘。原因是线条是在数据坐标中定义的,而标记是以点定义的。
解决办法是隐藏标记所在的行。我们可能会想到一个三层体系。最低层(zorder=1
)包含线条,就像它们一样。上面的图层包含与将要显示的标记相同的形状和大小的标记。然而,它们将与背景(通常为白色)的颜色相同。最顶层包含所需的标记。
import matplotlib.pyplot as plt
import numpy as np; np.random.seed(42)
fig, ax = plt.subplots(figsize=(6,5))
def plot_hidden_lines(x,y, ax = None, ms=15, color="r",
marker="^", alpha=0.4,**kwargs):
if not ax: ax=plt.gca()
ax.scatter(x,y, c=color, s=ms**2, marker=marker, alpha=alpha, zorder=3)
ax.scatter(x,y, c="w", s=ms**2, marker=marker, alpha=1, zorder=2)
ax.plot(x,y, color=color, zorder=1,alpha=alpha,**kwargs)
values1 = np.random.normal(loc=0, scale=1, size=10)
values2 = np.random.normal(loc=0, scale=1, size=10)
x = np.arange(len(values1))
plot_hidden_lines(x,values1)
plot_hidden_lines(x,values2, color="indigo", ms=20, marker="s")
plt.show()
发布于 2018-03-21 22:46:19
我认为最好的方法是将三角形覆盖在线上:
import matplotlib.pyplot as plt
import numpy as np
values = np.random.normal(loc=0, scale=1, size=10)
plt.plot( range(10), values, marker='^', markerfacecolor='red', markersize=15, color='red', linewidth=2)
plt.show()
程序输出:
如果您真的想要“看穿”方面,我建议您以某种方式计算线条与标记重叠的地方,并且只在中间画线:
import numpy as np
import matplotlib.pyplot as plt
values = np.random.normal(loc= 0, scale=1, size=10)
for i in range(9):
start_coordinate, end_coordinate = some_function(values[i], values[i+1])
plt.plot([i, i+1], [start_coordinate, end_coordinate], *whatever_other_arguments)
plt.scatter(range(10), values, *whatever_other_arguments)
plt.show()
这里的困难部分当然是计算这些坐标(如果你想放大这个不起作用),但老实说,考虑到这个问题的难度,我认为你找不到更好的.
https://stackoverflow.com/questions/49416776
复制相似问题