Python + Matplotlib - > twinx的NoneType错误

时间:2017-01-18 21:19:33

标签: python matplotlib

我想我在matplotlib的工作流程中遗漏了一些东西......我试图创建一个自定义大小的图形,添加一些东西,然后添加第二个轴:

#temp graph
import matplotlib.pyplot as plt
plt.cla()
plt.clf()
plt.close()
df = r

fig = plt.figure(figsize=(14,6))
ax = fig.add_subplot()

#r is a dataframe filled with a bunch of data

myplot = r[r.index<=100]["TOTAL DATA"].apply(lambda x:x/1000).plot(kind='bar')
ax2 = ax.twinx()
plt.show()

这给了我以下错误:

  

AttributeError Traceback(最近一次调用   最后)in()        13        14   ---&GT; 15 ax2 = ax.twinx()        16        17 plt.show()

     

AttributeError:&#39; NoneType&#39;对象没有属性&#39; twinx&#39;

有什么想法?谢谢!

3 个答案:

答案 0 :(得分:1)

函数fig.add_subplot()返回nothing),因此您将没有新的Axes。您必须使用plt.subplots()函数,它返回一个Figure对象和一个Axes对象

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

plt.cla()
plt.clf()
plt.close()
r = pd.DataFrame(np.random.randn(6,1),columns=['TOTAL DATA'])

fig, ax= plt.subplots(figsize=(14, 6))

myplot = r[r.index<=100]["TOTAL DATA"].apply(lambda x:x/1000).plot(kind='bar')
ax2 = ax.twinx()
plt.show()

答案 1 :(得分:0)

简单的问题。 ax变量不是范围内的轴。 myplot是。 myplot.twinx()有效。

答案 2 :(得分:0)

在问题的尝试方向上看更多,代码中唯一的问题是ax = fig.add_subplot()返回None ,因为它没有给出参数

通常的方法是调用实际创建子图的ax = fig.add_subplot(111)或任何其他(一组)参数。 See documentation

因此,如果给出该参数,问题中的代码可以正常工作。

import matplotlib.pyplot as plt
import pandas as pd
r = pd.DataFrame({"TOTAL DATA" : [1000,2000,3000]})

fig = plt.figure(figsize=(14,6))
ax = fig.add_subplot(111)

myplot = r[r.index<=100]["TOTAL DATA"].apply(lambda x:x/1000).plot(kind='bar')
ax2 = ax.twinx()
plt.show()