我有一个散点图以下代码,相应的图如下所示:
x = ['C9-U2', 'C10-U5', 'C10-U5', 'C11-U1', 'C11-U1']
y = ['J', 'C', 'H', 'J', 'H']
plt.scatter(x,y)
在图中,我想看到两个轴都已排序,即x轴应为[C9,C10,C11](正是这样,因为我已按此顺序输入了数据),并且y轴应为[C,H,J](不是)。
如何确定两个轴都已排序?
答案 0 :(得分:0)
我改变了创建散点图的方式。
这是我的代码:
import matplotlib.pyplot as plt
# This is your original code.
# x = ['C9-U2', 'C10-U5', 'C10-U5', 'C3-U1', 'C3-U1']
# y = ['J', 'C', 'H', 'J', 'H']
# plt.scatter(x,y)
# plt.show()
ordered_pairs = set([
('C9-U2', 'J'),
('C10-U5', 'C'),
('C10-U5', 'H'),
('C3-U1', 'J'),
('C3-U1', 'H')
])
x,y = zip(*ordered_pairs)
plt.scatter(x, y)
plt.show()
我将您的数据点转换为set
个有序对。这使我们可以zip
设置集合,该集合用于通过传递的每个参数来打包和解压缩数组。我们使用*
运算符来逆过程。您可以了解有关zip
here的更多信息。
运行代码后,显示的图像如下,希望是您正在寻找的图像:
答案 1 :(得分:0)
这实际上是一个问题,目前尚无好的解决方案。轴单位由输入确定。因此,一种解决方案是先按正确的顺序绘制某些内容,然后再将其删除,以手动确定分类顺序。
import matplotlib.pyplot as plt
x = ['C9-U2', 'C10-U5', 'C10-U5', 'C11-U1', 'C11-U1']
y = ['J', 'C', 'H', 'J', 'H']
def unitsetter(xunits, yunits, ax=None, sort=True):
ax = ax or plt.gca()
if sort:
xunits = sorted(xunits)
yunits = sorted(yunits)
us = plt.plot(xunits, [yunits[0]]*len(xunits),
[xunits[0]]*len(yunits), yunits)
for u in us:
u.remove()
unitsetter(x,y)
plt.scatter(x,y)
plt.show()
在这里,sort
设置为True
,因此您在两个轴上都获得了按字母顺序排序的类别。
如果您有一个自定义命令,则希望轴服从,就像这里的情况(至少对于x轴),您需要将该命令提供给上述功能。
unitsetter(x, sorted(y), sort=False)
plt.scatter(x,y)
答案 2 :(得分:0)
在“ ImportanceOfBeingErnest”之后,代码可能会缩短为
# initial plot to set sorted axis label
us = plt.plot(sorted(x),sorted(y))
[u.remove() for u in us]
# now plot the real thing, sorting not required
plt.scatter(x,y)