我有一个数据框,我想从中使用pandas将名为similarity的列绘制成直方图。这是我在ipython中使用的代码:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#%matplotlib inline throws an error but why?
%matplotlib auto
Df = pd.read_csv('file1.csv')
file1_hist = Df.hist(column= 'similarity', bins =50, color= 'red')
#setting labels for title and axes throws an error, why?
file1_hist.set_title('File 1 Histogram')
file1_hist.set_xlabel('similarity(%)')
file1_hist.set_ylabel('Frequency')
首先,我无法输入'%matplotlib inline'。错误显示UnknownBackend: No event loop integration for u'inline'. Supported event loops are: qt, qt4, qt5, gtk, gtk2, gtk3, tk, wx, pyglet, glut, osx
因此,我输入了%matplotlib auto'但我不确定这是不对的。
此外,当我尝试添加title / x / y轴名称时,出现错误消息:AttributeError: 'numpy.ndarray' object has no attribute 'set_title'
有人可以帮我解决发生的事情吗?
谢谢。
答案 0 :(得分:0)
DataFrame.hist()
会返回一个轴数组,因为如果您有多个列,并且如果不使用column
参数DataFrame.hist
过滤它们,则会绘制多个子图 - 每列一个。每个子图都有自己的轴:
In [266]: df = pd.DataFrame(np.random.randint(5, size=(5, 3)), columns=list('abc'))
In [267]: df
Out[267]:
a b c
0 4 1 0
1 4 0 0
2 4 4 1
3 1 0 4
4 2 0 1
In [268]: axes = df.hist(column='a', bins =50, color= 'red')
In [269]: axes
Out[269]: array([[<matplotlib.axes._subplots.AxesSubplot object at 0x0000000012167908>]], dtype=object)
In [270]: axes.shape
Out[270]: (1, 1)
In [271]: type(axes)
Out[271]: numpy.ndarray
In [272]: type(axes[0][0])
Out[272]: matplotlib.axes._subplots.AxesSubplot
所以试试这个代替你的代码:
file1_hist[0][0].set_title('File 1 Histogram')
file1_hist[0][0].set_xlabel('similarity(%)')
file1_hist[0][0].set_ylabel('Frequency')