Python matplotlib直方图标题带变量

时间:2017-11-06 01:39:24

标签: python dataframe matplotlib

我有一组如下所示的数据:

index   902.4  909.4   915.3
n       0.6    0.3     1.4
n.1     0.4    0.3     1.3
n.2     0.3    0.2     1.1
n.3     0.2    0.2     1.3
n.4     0.4    0.3     1.4
DCIS           0.3     1.6
DCIS.1  0.3    1.2
DCIS.2         1.1
DCIS.3  0.2    1.2
DCIS.4  0.2    1.3
DCIS.5  0.2    0.1     1.5
br_1    0.5    0.4     1.4
br_1.1         0.2     1.3
br_1.2  0.5    0.2     1.4
br_1.3  0.5    0.2     1.6
br_1.4         1.4

使用列[0]的常规python索引。以下是我在Stackoverflow成员的帮助下编写的代码:

nh = pd.ExcelFile(file)
df = pd.read_excel(nh)

df = df.set_index('Samples').transpose()

df = df.reset_index()

df_n = df.loc[df['index'].str.startswith('n')]
df_DCIS = df.loc[df['index'].str.startswith('DCIS')]
df_br1234 = df.loc[df['index'].str.startswith('br')]

#plt.tight_layout()

for i in range(1, df.shape[1]):
    plt.figure()
    df_n.iloc[:, i].hist(histtype='step', color='k', label='N')
    df_DCIS.iloc[:, i].hist(histtype='step', color='r', label='DCIS')
    df_br1234.iloc[:, i].hist(histtype='step', color='orange', label='IDC')
    plt.legend(loc='center left', bbox_to_anchor=(1, 0.5), fancybox=True, shadow=True)
    plt.title("Histograms for " + df.columns[i], loc='center')

plt.show()

这会创建多个具有截断图例的图形(当图形由pycharm制作时,这不会被切断)。但是,plt.title会给出一条错误消息,指出TypeError:必须是str,而不是float。我确实理解不同数据帧的列是浮点数,当我输入print(df.columns)时,它表示dtype是对象。有没有办法将float对象转换为str?我尝试使用

plt.title("Histograms for " + df.columns[i].astype('str')) 

但它说浮动对象没有属性类型。

3 个答案:

答案 0 :(得分:1)

尝试

plt.title("Histograms for {0:.2f}".format(df.columns[i]))

大括号内的字符来自Format Specification Mini-Language。此示例格式化一个带有2个小数位的浮点数。如果您点击链接,您会看到很多其他选项。

答案 1 :(得分:1)

您可以使用:

plt.title("Histograms for " + str(df.columns[i]))

答案 2 :(得分:1)

如果你不想将这些情节连在一起,我建议完全避免subplots()。相反,用plt.show()

分隔每个图
cols = ["902.4", "909.4", "915.3"]
data = [{"df":df_n, "color":"k", "label":"N"},
        {"df":df_DCIS, "color":"r", "label":"DCIS"},
        {"df":df_br1234, "color":"orange", "label":"IDC"}]

for col in cols:
    for dataset in data:

        dataset["df"][col].hist(histtype='step', 
                                color=dataset["color"], 
                                label=dataset["label"])
        plt.title(f"{dataset['label']} for {col}")
        plt.savefig(f"{dataset['label']}_for_{col}_plot.png")
        plt.show()