当前位置: 首页 > 知识库问答 >
问题:

Pyplot散点图,使用faceColors='none',并保留edgecolors为默认确定性标记颜色选择

仲高超
2023-03-14
import matplotlib.pyplot as plt
import numpy as np

x = np.array([1,2,3,4,5,6,7,8,9,10])
plt.scatter(x, x**2, s=50, marker='s',facecolors='none')
plt.scatter(x, x**3, s=50, marker='s',facecolors='none')
plt.scatter(x, x**4, s=50, marker='s',facecolors='none')

它填充了正方形标记,但不留下任何标记边缘,因此实际上看不到输出。如果我改为使用

plt.scatter(x, x**2, s=50, marker='s',facecolors='none',edgecolors='r')
plt.scatter(x, x**3, s=50, marker='s',facecolors='none',edgecolors='g')
plt.scatter(x, x**4, s=50, marker='s',facecolors='none',edgecolors='b')

然后,我确实看到了一系列由未填充的红色方块表示的数据图,但缺点是,我必须使用Edgecolor显式地设置我想要的颜色。但是,由于我的实际数据将由数量可变的数组组成,而实际数量在运行时之前是未知的,所以我希望用相同的散点图和不同的颜色来绘制每个数据系列,但不必显式指定使用什么颜色。我可以用

plt.scatter(x, y, s=50, marker='s',facecolors='none',edgecolor=np.random.rand(3,))

正如我所看到的,这是答案,但这不是理想的,因为我希望在运行之间有确定性的颜色。例如,如果我有3个数组,那么要绘制的第一个数组总是颜色为“x”,第二个数组总是颜色为“y”,第三个数组总是颜色为“z”。将其扩展到n数组,则绘制的n数组也总是相同的颜色(其中n可能非常大)。

4个图,原来的3个图保持原来的颜色,如上图1所示

Edit:顺便说一句,有人知道在设置facecolors='none'时不包括edgefaces(这样我们就可以轻松地使用默认的pyplot颜色)的原因吗?这似乎是一个相当奇怪的设计选择。

共有1个答案

柯昆杰
2023-03-14

前面要注意两件事。

>

  • 您希望有n不同的颜色,而n是先验未知的。Matplotlib的默认颜色周期有10种颜色。因此,如果n有可能大于10,那么不自己定义任何颜色的前提就不成立了。然后您需要选择一个自定义的颜色循环,或者定义颜色并在它们上循环。

    如果你想有不同颜色或大小的标记,散射主要是有用的。如果所有标记都是相同的颜色,那么可以轻松地使用plot

    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.array([1,2,3,4,5,6,7,8,9,10])
    plt.plot(x, x**2, ls='none', ms=7, marker='s', mfc='none')
    plt.plot(x, x**3, ls='none', ms=7, marker='s', mfc='none')
    plt.plot(x, x**4, ls='none', ms=7, marker='s', mfc='none')
    
    plt.show()
    

    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.array([1,2,3,4,5,6,7,8,9,10])
    
    plt.scatter(x, x**2, s=50, marker="$\u25A1$") 
    plt.scatter(x, x**3, s=50, marker="$\u25A1$")
    plt.scatter(x, x**4, s=50, marker="$\u25A1$")
    
    plt.show()
    

  •  类似资料:
    • 我有一个带符号值的pyplot极坐标散点图。Pyplot做了“正确”的事情,只创建一个正轴,然后反射负值,使其看起来像180度以外的正值。 但是,默认情况下,pyplot使用相同的颜色打印所有点。所以正负值是无法区分的。 我想很容易区分角度x的正值和角度(x/-180)的负值,正值为红色,负值为蓝色。 我在为这种情况创建一个非常简单的彩色地图方面没有取得任何进展。 帮助

    • 我在给散点图标记着色时遇到了一些麻烦。我有一个简单的数据框,其中有一个值“pos”和另外两个值“af_min”和“af_max”。我想根据af_x和af_y的一些条件给标记上色,但是因为我没有任何列可以用作色调,所以我创建了自己的列“color”。 现在,我创建了一个散点图,使用海运和海运调色板的方式: 在这里,我放置了整个脚本,以便您可以复制它: 感谢所有能帮忙的人!

    • 我试图弄清楚如何动态设置数据点的edgecolor。可以使用c=[array of numeric labels]设置facecolor,但对于EdgeColor则不是这样。 我试图实现的是一个图,其中facecolor等于实例算法的预测标签,edgecolor等于该实例的真实标签。这样,我可以直观地比较结果(对于进一步的工作很重要)。 有什么建议吗?这是我目前的代码: 这给了我以下的情节 我感谢

    • 函数调用(不起作用): 功能代码:

    • 问题内容: 我想将matplotlib的标准颜色旋转更改为另一个颜色图。具体来说,我想使用“ gdist_rainbow”。那有可能吗,如果可以的话,我该如何实现呢? 我已经有自定义设置,例如 所以我想我只是在寻找要添加的正确键。 问题答案: 您需要为rcParameter提供一个颜色循环。一个颜色循环由颜色列表组成。可以根据颜色图进行选择。请参见下面的示例:

    • 在散点图的pyplot文档中: 标记大小 是哪种单位?这是什么意思?是否意味着? 基本上,我试图用不同的标记大小绘制散点图,我想弄清楚数字的含义。