在python plt.plot中使用一系列作为标记

时间:2016-12-12 15:36:04

标签: python pandas matplotlib

是否可以使用数据框中的列来缩放matplotlib中的标记大小?当我执行以下操作时,我一直收到有关使用系列的错误。

import pandas as pd
import matplotlib.pyplot as plt

my_dict = {'Vx': [16,25,85,45], 'r': [1315,5135,8444,1542], 'ms': [10,50,100, 25]}
df= pd.DataFrame(my_dict)
fig, ax = plt.subplots(1, 1, figsize=(20, 10))
ax.plot(df.Vx, df.r, '.', markersize= df.ms)

当我跑

ValueError: setting an array element with a sequence.

我猜它不喜欢我向标记添加一系列的事实,但必须有一种方法让它起作用...

2 个答案:

答案 0 :(得分:3)

最好使用pandas中的内置散点图函数,您可以将整个系列对象作为大小参数传递以改变气泡大小:

df.plot.scatter(x=['Vx'], y=['r'], s=df['ms'], c='g')  # df['ms']*5 bubbles more prominent

enter image description here

或者,如果您想通过matplotlib路线,则需要每次将series对象中的标量值传递给markersize arg。

fig, ax = plt.subplots()
[ax.plot(row['Vx'], row['r'], '.', markersize=row['ms']) for idx, row in df.iterrows()]
plt.show()

enter image description here

答案 1 :(得分:3)

使用plt.scatter代替plt.plot。 Scatter允许您使用元组或列表指定大小s以及点的颜色c

import pandas as pd
import matplotlib.pyplot as plt

my_dict = {'Vx': [16,25,85,45], 'r': [1315,5135,8444,1542], 'ms': [10,50,100, 25]}
df= pd.DataFrame(my_dict)
fig, ax = plt.subplots(1, 1, figsize=(20, 10))
ax.scatter(df.Vx, df.r, s= df.ms)
plt.show()