python - 如何通过使用pyplot减少y轴的值来对散点图进行排序?
问题描述
我有一个数据框 df1 ,其中包含两列 freq 和 RN,其中数据按 freq 升序排序。
In [2]: df1.head()
Out[2]:
freq RN
147 1 181
56 1 848
149 1 814
25 1 829
我想绘制一个散点图,其中 X 轴为 RN,y 轴为频率,其中 X 值按 y 值的升序排列,即。我希望 x 轴排列为 841,848,835,... 如 df1 中给出的,它已根据频率值的升序排序。
现在,如果我写 plt.scatter('RN', 'freq',data=df1)
输出 x 轴,我得到的不是按频率的升序排序。它按照自己的自然升序排列,例如 800,801,...,860。
注意: plt.bar('RN', 'freq',data=df1)
以我想要的正确方式工作。
我该如何改变它?
解决方案
- 如果
RN
列是数字,绘图 API 将按数字对其进行排序。 RN
如果您将列类型设置为 ,则可以做到这一点str
。- 如果 中的值
RN
是唯一的,则此方法效果最佳。如果它们不是唯一的,则非唯一的所有freq
值RN
将被绘制在一起。 - 如果
RN
不是唯一的,则绘图 API 无法区分一个值与另一个值。
- 如果 中的值
非唯一 RN (a)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# create test data
np.random.seed(365)
data = {'freq': np.random.randint(20, size=(20,)), 'RN': np.random.randint(800, 900, size=(20,))}
df = pd.DataFrame(data)
# convert RN to a str type
df.RN = df.RN.astype(str)
# sort freq
df.sort_values('freq', ascending=True, inplace=True)
# plot
plt.scatter('RN', 'freq', data=df)
非唯一 RN (b)
- 用于
pandas.DataFrame.groupby
将非唯一 RN 分组在一起
# create test data
# create test data
np.random.seed(365)
data = {'freq': np.random.randint(20, size=(20,)), 'RN': np.random.randint(800, 900, size=(20,))}
df = pd.DataFrame(data)
# convert RN to a str type
df.RN = df.RN.astype(str)
# combine non-unique RN with groupby and sort by freq
dfg = df.groupby('RN', as_index=False)['freq'].sum().sort_values('freq')
# plot
plt.scatter('RN', 'freq', data=dfg)
独特的注册护士
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# create test data
np.random.seed(365)
data = {'freq': np.random.randint(20, size=(20,)), 'RN': np.arange(800, 820)}
df = pd.DataFrame(data)
# convert RN to a str type
df.RN = df.RN.astype(str)
# sort `freq`
df.sort_values('freq', ascending=True, inplace=True)
# plot
plt.scatter('RN', 'freq', data=df)
推荐阅读
- python - 代码无法正常工作 - 尝试创建一个简单的图表
- python - 如何使用 numpy 创建一个重复值数组
- javascript - 将锚标记附加到部分以及传输 id
- c++ - std::swap 丢失了基于类型的别名分析使用的信息?
- visual-studio - “转到定义”版本号从何而来?
- prettier - 防止 Prettier 中的换行符
- pine-script - Tradingview 策略不准确。需要建议
- amazon-web-services - 如何通过 AWS HTTP API 向 Lambda 发送参数
- mysql - MySQL 奇怪的符号
- python - Python如何编程在一定时间后关闭