首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >matplotlib中每个地块的唯一地块标记

matplotlib中每个地块的唯一地块标记
EN

Stack Overflow用户
提问于 2012-10-27 01:31:55
回答 5查看 41.3K关注 0票数 44

我有一个循环,我创建了一些地块,我需要为每个地块提供唯一的标记。我考虑创建函数,它返回随机符号,并在我的程序中这样使用它:

代码语言:javascript
运行
复制
for i in xrange(len(y)):
    plt.plot(x, y [i], randomMarker())

但我认为这种方式并不好。我需要这个只是为了区分图例上的地块,因为地块不能与线相连,它们必须只是一组点。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-10-27 02:32:00

itertools.cycle将无限期地迭代列表或元组。这比一个为你随机挑选标记的函数更可取。

Python 2.x

代码语言:javascript
运行
复制
import itertools
marker = itertools.cycle((',', '+', '.', 'o', '*')) 
for n in y:
    plt.plot(x,n, marker = marker.next(), linestyle='')

Python 3.x

代码语言:javascript
运行
复制
import itertools
marker = itertools.cycle((',', '+', '.', 'o', '*')) 
for n in y:
    plt.plot(x,n, marker = next(marker), linestyle='')

您可以使用它来生成如下所示的图(Python 2.x):

代码语言:javascript
运行
复制
import numpy as np
import matplotlib.pyplot as plt
import itertools

x = np.linspace(0,2,10)
y = np.sin(x)

marker = itertools.cycle((',', '+', '.', 'o', '*')) 

fig = plt.figure()
ax = fig.add_subplot(111)

for q,p in zip(x,y):
    ax.plot(q,p, linestyle = '', marker=marker.next())
    
plt.show()

票数 85
EN

Stack Overflow用户

发布于 2020-01-16 18:06:44

似乎还没有人提到循环属性的内置pyplot方法。所以就是这样:

代码语言:javascript
运行
复制
import numpy as np
import matplotlib.pyplot as plt
from cycler import cycler

x = np.linspace(0,3,20)
y = np.sin(x)

fig = plt.figure()
plt.gca().set_prop_cycle(marker=['o', '+', 'x', '*', '.', 'X']) # gca()=current axis

for q,p in zip(x,y):
    plt.plot(q,p, linestyle = '')

plt.show()

但是,这样会丢失颜色循环。可以通过将颜色cycler和标记cycler对象相乘或相加来添加背面颜色,如下所示:

代码语言:javascript
运行
复制
fig = plt.figure()

markercycle = cycler(marker=['o', '+', 'x', '*', '.', 'X'])
colorcycle = cycler(color=['blue', 'orange', 'green', 'magenta'])
# Or use the default color cycle:
# colorcycle = cycler(color=plt.rcParams['axes.prop_cycle'].by_key()['color'])

plt.gca().set_prop_cycle(colorcycle * markercycle) # gca()=current axis

for q,p in zip(x,y):
    plt.plot(q,p, linestyle = '')

plt.show()

在添加循环时,它们需要具有相同的长度,因此在这种情况下,我们只使用markercycle的前四个元素:

代码语言:javascript
运行
复制
plt.gca().set_prop_cycle(colorcycle + markercycle[:4]) # gca()=current axis

票数 11
EN

Stack Overflow用户

发布于 2016-12-08 16:44:10

您还可以使用元组生成标记,例如

代码语言:javascript
运行
复制
import matplotlib.pyplot as plt
markers = [(i,j,0) for i in range(2,10) for j in range(1, 3)]
[plt.plot(i, 0, marker = markers[i], ms=10) for i in range(16)]

详情请参见Matplotlib markers doc site

此外,这可以与上面提到的itertools.cycle循环结合使用

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

https://stackoverflow.com/questions/13091649

复制
相关文章

相似问题

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