假设我有一个包含三列的数组:
>>>print(arr)
array(
[[1 2 -1]
[1 3 1]
[3 2 -1]
[5 2 -1]]
)
假设我想将其变成散点图:
plt.plot(arr[:,0], arr[:,1], 'xr')
工作正常。但是,所有分散的点看起来像红色&#39; 。假设我想要一个红色的&#39; x&#39;如果第三列值为-1,则蓝色&#39; <&#39; 如果值为1.我该怎么做?
这可以通过plt.plot()
来实现吗?
答案 0 :(得分:2)
如果要更改颜色和标记,则需要绘制多个散点图,每个标记至少一个。
import matplotlib.pyplot as plt
import numpy as np
a = np.array([[1, 2, -1],
[1, 3, 1],
[3, 2, -1],
[5, 2, -1]])
mapping= {-1: ("red", "x"), 1: ("blue", "o")}
for c in np.unique(a[:,2]):
d = a[a[:,2] == c]
plt.scatter(d[:,0], d[:,1], c=mapping[c][0], marker=mapping[c][1])
#plt.plot(d[:,0], d[:,1], color=mapping[c][0], marker=mapping[c][1])
plt.show()
同样可以使用plot
(请参阅代码中的注释行)。
答案 1 :(得分:1)
遍历您的列表,并考虑每个子列表的第3项是颜色。根据您拥有的数据对颜色进行属性化。在这里,如果'r'
,我将值c
分配给c == -1
,否则,它将等于'b'
,意味着 blue 。
from matplotlib import pyplot as plt
arr = [[1, 2, -1], [1, 3, 1], [3, 2, -1], [5, 2, -1]]
for x, y, color in arr:
c = 'r' if color == -1 else 'b'
plt.plot(x, y, 'x' + c)
plt.show()
答案 2 :(得分:0)
作为Python初学者,我最近遇到了类似的问题,对我来说最好的解决方案是使用精彩的“seaborn”包。
诀窍是将Pandas'DataFrame'和Seaborn的“FacetGrid”对象结合起来让他们完成所有工作。以下是我为您的特定示例所做的工作:
这是我的代码:
import seaborn as sns
import pandas as pd
a = pd.DataFrame(
[[1, 2, -1],
[1, 3, 1],
[3, 2, -1],
[5, 2, -1]])
a.columns=['A','B','C']
sns.FacetGrid(a, hue="C", size=2).map(plt.scatter, "A", "B").add_legend()
plt.show()
Voila!
显然这是一个微不足道的例子,但是对于真实的数据,结果非常好且易于复制(见下文)
PS:这是我关于stackoverflow的第一篇文章 - 感觉就像某事的开始