如何在for循环中更改标记形状和颜色?

-2 投票
1 回答
3010 浏览
提问于 2025-05-01 08:31

我有一组数据,长得像这样:

x=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y=[5, 10, 15, 20, 25, 5, 10, 15, 20, 25,]

我想做一个散点图,要求是:

  • 前5个元素的 xy 用一种标记形状,颜色从蓝色渐变到红色
  • 接下来的5个元素的 xy 用另一种标记,颜色和前面的保持一致。

实际上,我有 x 有1000个元素,而 y 有10组,每组100个元素。我想画出10组散点,每组用不同的标记形状,颜色都从蓝色渐变到红色。

举个例子:

x=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y=[5, 10, 15, 20, 25, 5, 10, 15, 20, 25,]
c=['o', '*']
z=[.1, .2, .3, .4, .5, .6, .7, .8, .9, .99]
plt.scatter( X, Y, marker=x, c=z)
暂无标签

1 个回答

4

首先,你的代码里有一些问题,变量的命名有的用大写字母,有的用小写字母,但在Python中,大小写是有区别的。

marker这个选项只允许使用一个字符,所以你不能直接传一个字符列表。相反,你需要循环处理每一个你想要的字符。下面是一个用你数据的小例子:

import matplotlib.pyplot as plt

x=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y=[5, 10, 15, 20, 25, 5, 10, 15, 20, 25,]
marker= ['o', 's']
z=[.1, .3, .5, .7, .99]

n = 5
for k in range(2):    
    plt.scatter(x[k*n:(k + 1)*n], y[k*n:(k + 1)*n], s=100,
                  marker=marker[k], c=z)

这样做的结果是:

enter image description here

撰写回答