【发布时间】:2020-07-06 10:46:11
【问题描述】:
我正在尝试控制 matplotlib 散点图上的 y 轴顺序,但我拥有的数据中 x 轴和 y 轴的顺序导致绘图显示不正确。
这里有一些代码来说明这个问题和一个次优的解决方案。
import pandas as pd
from numpy import random
import matplotlib.pyplot as plt
# make some fake data
axes = ['a', 'b', 'c', 'd']
pairs = pd.DataFrame([(x, y) for x in axes for y in axes], columns=['x', 'y'])
pairs['value'] = random.randint(100, size=16) + 100
# remove the diagonal
pairs_nodiag = pairs[pairs['x'] != pairs['y']]
# zero the values for the diagonal
pairs_diag = pairs.copy()
pairs_diag.loc[pairs_diag['x'] == pairs_diag['y'], 'value'] = 0
fig, ax = plt.subplots(nrows=1, ncols=3, figsize=(5, 3))
scatter = ax[0].scatter(x=pairs['x'], y=pairs['y'], s=pairs['value'])
scatter = ax[1].scatter(x=pairs_nodiag['x'], y=pairs_nodiag['y'], s=pairs_nodiag['value'])
scatter = ax[2].scatter(x=pairs_diag['x'], y=pairs_diag['y'], s=pairs_diag['value'])
plt.show()
最左边的是原始数据。中间是有问题的情节;我希望 y 轴与最左边的图相同。最右边的情节是我使用次优解决方法后的情节。我确信有一种方法可以控制轴上的顺序,但我在 Python 方面还不够专业,还不知道如何做到这一点。
【问题讨论】:
-
我认为您的解决方法不是解决方法,但它是正确的方法。通过布尔索引,您可以正确地将 ('a', 'b') 作为第一个值,但这当然会破坏顺序。
-
我认为这是一种有效的解决方法,但实际上,我得到的数据并不完整,因此必须对其进行修补以确保绘图正常工作会很烦人。
-
不幸的是,我认为您必须为不想绘制的值保留一些占位符。我会使用
None而不是 0 -
@AndrewChisholm:感谢您的提问。点赞!
标签: python pandas matplotlib