我正在尝试将背景图像设置为我在matplotlib中完成的线图。在导入图像和使用zorder参数时,我得到两个单独的图像,代替单个组合图像。请建议我一个出路。我的代码是 -
import quandl
import pandas as pd
import sys, os
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import itertools
def flip(items, ncol):
return itertools.chain(*[items[i::ncol] for i in range(ncol)])
df = pd.read_pickle('neer.pickle')
rows = list(df.index)
countries = ['USA','CHN','JPN','DEU','GBR','FRA','IND','ITA','BRA','CAN','RUS']
x = range(len(rows))
df = df.pct_change()
fig, ax = plt.subplots(1)
for country in countries:
ax.plot(x, df[country], label=country)
plt.xticks(x, rows, size='small', rotation=75)
#legend = ax.legend(loc='upper left', shadow=True)
plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)
plt.show(1)
plt.figure(2)
im = plt.imread('world.png')
ax1 = plt.imshow(im, zorder=1)
ax1 = df.iloc[:,:].plot(zorder=2)
handles, labels = ax1.get_legend_handles_labels()
plt.legend(flip(handles, 2), flip(labels, 2), loc=9, ncol=12)
plt.show()
所以在图(2)中,我面临问题,得到两个单独的情节
答案 0 :(得分:1)
为了在绘图上叠加背景图片,我们需要来自imshow
的{{1}}和extent
参数。
以下是代码的精简版本。没有时间清理。
首先为您的代码中列出的11个国家/地区创建示例数据。然后是matplotlib
并保存到文件中(因为没有pickle文件数据)。
pickled
接下来读取pickle文件,我们直接从import quandl
import pandas as pd
import sys, os
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import itertools
from scipy.misc import imread
countries = ['USA','CHN','JPN','DEU','GBR','FRA','IND','ITA','BRA','CAN','RUS']
df_sample = pd.DataFrame(np.random.randn(10, 11), columns=list(countries))
df_sample.to_pickle('c:\\temp\\neer.pickle')
pandas
接下来,我们使用df = pd.read_pickle('c:\\temp\\neer.pickle')
my_plot = df.plot(kind='bar',stacked=True,title="Plot Over Image")
my_plot.set_xlabel("countries")
my_plot.set_ylabel("some_number")
将图片读入imread
。
plot
答案 1 :(得分:0)
您在代码中创建了两个单独的数字。第一个是fig, ax = plt.subplots(1)
,第二个是plt.figure(2)
如果删除第二个数字,您应该更接近目标