matplotlib中包含数组列数据的太多图例

时间:2016-09-14 15:25:29

标签: python arrays matplotlib legend

我尝试用列表数据绘制简单的旋转矩阵结果。但我的结果数组的数字有多个索引作为屏幕转储图像。并且第二个图与我的属性(线条样式等)不完全相同 我想我确实错误地对数组处理进行了绘制,但不知道是什么。 欢迎任何评论。提前谢谢。

enter image description here

我的代码如下。

import numpy as np
import matplotlib.pyplot as plt

theta = np.radians(30)
c, s = np.cos(theta), np.sin(theta)
R = np.matrix('{} {}; {} {}'.format(c, -s, s, c))
x = [-9, -8, -7, -6, -5, -4, -3, -2, -1,0,1,2,3,4,5,6,7,8,9]
y = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]

line_b = [x,y]

result_a = R*np.array(line_b)

fig=plt.figure()
ax1 = fig.add_subplot(111)
plt.plot(line_b[0],line_b[1], color="blue", linewidth=2.5, linestyle="-",    label='measured')
plt.plot(result_a[0], result_a[1], 'r*-', label='rotated')
ax1.set_ylim(-10,10)
ax1.set_xlim(-10,10)
plt.legend()

# axis center to move 0,0
ax1.spines['right'].set_color('none')
ax1.spines['top'].set_color('none')
ax1.xaxis.set_ticks_position('bottom')
ax1.spines['bottom'].set_position(('data',0))
ax1.yaxis.set_ticks_position('left')
ax1.spines['left'].set_position(('data',0))

plt.show()

1 个答案:

答案 0 :(得分:0)

问题在于您试图将两行result_a绘制成一维np.ndarray s,而实际上它们是np.matrix,它们总是2- {维。亲眼看看:

>>> result_a[0].shape
(1, 19)

要解决此问题,您需要将矢量result_a[0], result_a[1]转换为数组。可以找到简单的方法in this answer。例如,

rx = result_a[0].A1
ry = result_a[1].A1
# alternatively, the more compact
# rx, ry = np.array(result_a)
plt.plot(rx, ry, 'r*-', label='rotated')

产生以下内容(使用plt.legend(); plt.show()):

enter image description here