Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Matplot:如何绘制真/假或活动/非活动数据?_Python_Matplotlib_Plot_Scipy - Fatal编程技术网

Python Matplot:如何绘制真/假或活动/非活动数据?

Python Matplot:如何绘制真/假或活动/非活动数据?,python,matplotlib,plot,scipy,Python,Matplotlib,Plot,Scipy,我想绘制一个true/false或active/deactive二进制数据,类似下图: 横轴是时间,纵轴是一些活动(白色)或非活动(黑色)的实体(这里是一些传感器)。如何使用pyplot绘制这样的图形 我搜索了这些图形的名称,但找不到它。您要查找的是imshow: import matplotlib.pyplot as plt import numpy as np # get some data with true @ probability 80 % data = np.random.ra

我想绘制一个
true/false
active/deactive
二进制数据,类似下图:

横轴是时间,纵轴是一些活动(白色)或非活动(黑色)的实体(这里是一些传感器)。如何使用
pyplot
绘制这样的图形


我搜索了这些图形的名称,但找不到它。

您要查找的是
imshow

import matplotlib.pyplot as plt
import numpy as np

# get some data with true @ probability 80 %
data = np.random.random((20, 500)) > .2

fig = plt.figure()
ax = fig.add_subplot(111)
ax.imshow(data, aspect='auto', cmap=plt.cm.gray, interpolation='nearest')
然后你只需要从某处得到Y标签

你问题中的图像似乎有一些插值。让我们再做几件事:

import matplotlib.pyplot as plt
import numpy as np

# create a bit more realistic-looking data
# - looks complicated, but just has a constant switch-off and switch-on probabilities
#   per column
# - the result is a 20 x 500 array of booleans
p_switchon = 0.02
p_switchoff = 0.05
data = np.empty((20,500), dtype='bool')
data[:,0] = np.random.random(20) < .2
for c in range(1, 500):
    r = np.random.random(20)
    data[data[:,c-1],c] = (r > p_switchoff)[data[:,c-1]]
    data[-data[:,c-1],c] = (r < p_switchon)[-data[:,c-1]]

# create some labels
labels = [ "label_{0:d}".format(i) for i in range(20) ]

# this is the real plotting part
fig = plt.figure()
ax = fig.add_subplot(111)
ax.imshow(data, aspect='auto', cmap=plt.cm.gray)
ax.set_yticks(np.arange(len(labels)))
ax.set_yticklabels(labels)
导入matplotlib.pyplot作为plt
将numpy作为np导入
#创建更逼真的数据
#-看起来很复杂,但只是有一个恒定的关闭和打开概率
#每列
#-结果是一个20 x 500的布尔数组
p_开关=0.02
p_关闭=0.05
data=np.empty((20500),dtype='bool')
数据[:,0]=np.random.random(20)<.2
对于范围(1500)内的c:
r=np.随机。随机(20)
数据[数据[:,c-1],c]=(r>p_关闭)[数据[:,c-1]]
数据[-data[:,c-1],c]=(r
创造

然而,插值在这里不一定是件好事。为了使不同的行更容易分开,可以使用颜色:

import matplotlib.pyplot as plt
import matplotlib.colors
import numpy as np

# create a bit more realistic-looking data
# - looks complicated, but just has a constant switch-off and switch-on probabilities
#   per column
# - the result is a 20 x 500 array of booleans
p_switchon = 0.02
p_switchoff = 0.05
data = np.empty((20,500), dtype='bool')
data[:,0] = np.random.random(20) < .2
for c in range(1, 500):
    r = np.random.random(20)
    data[data[:,c-1],c] = (r > p_switchoff)[data[:,c-1]]
    data[-data[:,c-1],c] = (r < p_switchon)[-data[:,c-1]]

# create some labels
labels = [ "label_{0:d}".format(i) for i in range(20) ]

# create a color map with random colors
colmap = matplotlib.colors.ListedColormap(np.random.random((21,3)))
colmap.colors[0] = [0,0,0]

# create some colorful data:
data_color = (1 + np.arange(data.shape[0]))[:, None] * data

# this is the real plotting part
fig = plt.figure()
ax = fig.add_subplot(111)
ax.imshow(data_color, aspect='auto', cmap=colmap, interpolation='nearest')
ax.set_yticks(np.arange(len(labels)))
ax.set_yticklabels(labels)
导入matplotlib.pyplot作为plt
导入matplotlib.colors
将numpy作为np导入
#创建更逼真的数据
#-看起来很复杂,但只是有一个恒定的关闭和打开概率
#每列
#-结果是一个20 x 500的布尔数组
p_开关=0.02
p_关闭=0.05
data=np.empty((20500),dtype='bool')
数据[:,0]=np.random.random(20)<.2
对于范围(1500)内的c:
r=np.随机。随机(20)
数据[数据[:,c-1],c]=(r>p_关闭)[数据[:,c-1]]
数据[-data[:,c-1],c]=(r
创造


当然,你会想使用一些不那么奇怪的颜色方案,但这实际上取决于你的艺术观点。这里的技巧是,行
n
上的所有
True
元素都有值
n+1
和,所有
False
元素都是
0
中的
data\u color
。这使得创建颜色贴图成为可能。当然,如果您想要两种或三种颜色的循环颜色贴图,只需在
imshow
by中使用
data\u color
的模数,例如
data\u color%3

谢谢您的回答!你知道这类图形的名称吗?+1似乎也是使用Matplotlib制作的,看起来完全一样。值得一提的是,我发现在这个应用程序中使用插值会产生误导,这表明在冰箱和电话之间有一个渐进的过渡!我更喜欢直条,但可能会选择一些漂亮的颜色。@Constantine:我会称之为时间线图,但我真的不知道是否会有更好的名称。不幸的是,带状图是为其他东西保留的。@BasSwinckels:是的,插值在这里不是最好的。我添加了一个带有颜色的非插值版本(不知道颜色的精确性)。从可视化的角度来看,我实际上在不同的块之间有三行数据(颜色/深色)和一行空行(黑色),因为这将使每一行在视觉上更容易理解。高质量的回答。这应该得到某种奖励。