在matplotlib中设置线图的图像背景

时间:2016-10-19 19:16:14

标签: python matplotlib

我正在尝试将背景图像设置为我在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)中,我面临问题,得到两个单独的情节

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

这是以图像为背景的输出图。 如上所述,这是粗糙的,可以进一步改进。 enter image description here

答案 1 :(得分:0)

您在代码中创建了两个单独的数字。第一个是fig, ax = plt.subplots(1),第二个是plt.figure(2)

如果删除第二个数字,您应该更接近目标