使用python绘制垂直条带中的像素列表

2024-04-19 02:03:57 发布

您现在位置:Python中文网/ 问答频道 /正文

这是一个单一的地带

values = random.sample(range(60, 100), 40)

width = 10
plt.imshow(np.repeat(values, width).reshape(-1, width), cmap='gray')

enter image description here

我如何修改它以绘制彼此相邻的所有列表,而不是单个列表,例如

values_list = []
for x in range(10):
    values_list.append(random.sample(range(60, 100), 40))

这是我尝试过的,但它只绘制了列表中的最后一个

for i in range(len(values_list)):

    plt.imshow(np.repeat(values_list[i], width).reshape(-1, width), cmap='gray')

plt.show()

如何使列表彼此垂直剥离

enter image description here


Tags: sample列表np绘制rangepltrandomwidth
1条回答
网友
1楼 · 发布于 2024-04-19 02:03:57

没有必要使用np.repeat。只需reshape()将其更改为2D数组。可以使用imshowextent=参数设置位置。要获得正确的x和y限制,需要显式设置它们。设置autoscale_on=False可防止imshow超过限制origin='lower'设置底部value_list[i][0]处的值,以便y轴具有其通常的方向

下面的代码使用来自this example的方法

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

values_list = [random.sample(range(60, 100), 40) for x in range(10)]

fig, ax = plt.subplots()
width = 10
xlim = 0, width*len(values_list)
ylim = 0, max([len(v) for v in values_list]) + 2
ax.set(xlim=xlim, ylim=ylim, autoscale_on=False)
for i in range(len(values_list)):
    plt.imshow(np.array(values_list[i]).reshape(-1, 1), extent=[i * width, (i + 1) * width, 0, len(values_list[i])],
               origin='lower', cmap='inferno')
ax.set_aspect('auto')
plt.show()

example image

PS:要使x轴编号为“列”,请将宽度设置为1,并在x轴位置上添加0.5。或者,可以将“列”之间的距离设置为大于其宽度,以获得条形图的效果

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

values_list = [random.sample(range(60, 100), random.randint(10,15)) for x in range(10)]

fig, ax = plt.subplots()
for i in range(len(values_list)):
    plt.imshow(np.array(values_list[i]).reshape(-1, 1), origin='lower',
               extent=[i + 0.6, i + 1.4, 0, len(values_list[i])], cmap='inferno')
ax.set_xticks(range(1, len(values_list) + 1))
xlim = 0.3, len(values_list) + 0.7
ylim = 0, max([len(v) for v in values_list]) + 2
ax.set(xlim=xlim, ylim=ylim)
ax.set_aspect('auto')
plt.show()

bar plot example

PS:要有水平条,只需将所有x相关值与y相关值交换即可reshape(1, -1)将需要使像素从左向右移动

for i in range(len(values_list)):
    plt.imshow(np.array(values_list[i]).reshape(1, -1), origin='lower',
               extent=[0, len(values_list[i]), i + 0.6, i + 1.4], cmap='RdYlBu')
ax.set_yticks(range(1, len(values_list) + 1))
ylim = 0.3, len(values_list) + 0.7
xlim = 0, max([len(v) for v in values_list]) + 2
ax.set(xlim=xlim, ylim=ylim)

相关问题 更多 >