我有一个熊猫数据框。我正在制作散点图,并尝试根据色条对数据进行分类。我这样做是为了每月分类和质量分类,如下面的示例代码所示。

a = np.random.rand(366)
b = np.random.rand(366)*0.4
index = (pd.date_range(pd.to_datetime('01-01-2000'), periods=366))
df = pd.DataFrame({'a':a,'b':b},index = index)
plt.scatter(df['a'],df['b'],c = df.index.month)
plt.colorbar()


python - matplotlib和 Pandas 中的半年颜色条-LMLPHP

还有质量:

plt.scatter(df['a'],df['b'],c = df.index.quarter)
plt.colorbar()


python - matplotlib和 Pandas 中的半年颜色条-LMLPHP

我的问题是:有没有办法按半年进行分类。例如从1-6和7-12月份开始,以及按月这样的月份:10-3和4-9
谢谢您的帮助和建议,我们将不胜感激。

最佳答案

制作一个自定义函数以将散点函数放入color参数。我以半年度的划分为例。您可以将其用作自己的拆分功能的模板:

import numpy as np
import pandas as pd
import matplotlib.pylab as plt

# if month is 1 to 6 then the first halfyear else the second halfyear
def halfyear(m):
    return 0 if (m <= 6) else 1
# vectorize function to use with Series
hy = np.vectorize(halfyear)

a = np.random.rand(366)
b = np.random.rand(366)*0.4
index = (pd.date_range(pd.to_datetime('01-01-2000'), periods=366))
df = pd.DataFrame({'a':a,'b':b},index = index)

# apply custom function 'hy' for 'c' argument
plt.scatter(df['a'],df['b'], c = hy(df.index.month))
plt.colorbar()

plt.show()


python - matplotlib和 Pandas 中的半年颜色条-LMLPHP

使用lambda函数的另一种方式如下:

plt.scatter(df['a'],df['b'], \
 c = df.index.map(lambda m: 0 if (m.month > 0 and m.month < 7) else 1))

08-24 17:21