首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >移除matplotlib图中的点线

移除matplotlib图中的点线
EN

Stack Overflow用户
提问于 2018-03-21 21:24:56
回答 2查看 2.4K关注 0票数 1

我有以下matplotlib片段:

代码语言:javascript
运行
复制
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);

按计划进行。

我想让这条线看不见的地方,它与点重叠,这样点看起来更多的连接线,而不是躺在线的顶部。这样做是有可能的,要么让线在重叠的地方不可见,要么创建一个新的线条对象来链接这些点,而不是跟踪它们?

为了明确起见,我不希望删除整条线,只希望删除与点重叠的部分。

EN

回答 2

Stack Overflow用户

发布于 2018-03-22 10:36:10

一般来说,很难让线停在标记的边缘。原因是线条是在数据坐标中定义的,而标记是以点定义的。

解决办法是隐藏标记所在的行。我们可能会想到一个三层体系。最低层(zorder=1)包含线条,就像它们一样。上面的图层包含与将要显示的标记相同的形状和大小的标记。然而,它们将与背景(通常为白色)的颜色相同。最顶层包含所需的标记。

代码语言:javascript
运行
复制
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()

票数 2
EN

Stack Overflow用户

发布于 2018-03-21 22:46:19

我认为最好的方法是将三角形覆盖在线上:

代码语言:javascript
运行
复制
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()

程序输出:

如果您真的想要“看穿”方面,我建议您以某种方式计算线条与标记重叠的地方,并且只在中间画线:

代码语言:javascript
运行
复制
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()

这里的困难部分当然是计算这些坐标(如果你想放大这个不起作用),但老实说,考虑到这个问题的难度,我认为你找不到更好的.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49416776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档