Передайте оси на вызовы графика:
waterindep['waterpoint_type'].value_counts().plot(
kind='bar',title='Waterpoint_Type', ax=ax1)
waterindep['waterpoint_type_group'].value_counts().plot(
kind='bar',title='Waterpoint_Type_Group', ax=ax2)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
np.random.seed(2015)
fig1 = plt.figure(figsize=[15,8])
gs = gridspec.GridSpec(100,100)
ax1 = fig1.add_subplot(gs[:,0:50])
ax2 = fig1.add_subplot(gs[:,51:100])
waterindep = pd.DataFrame(np.random.randint(10, size=(100,2)),
columns=['waterpoint_type', 'waterpoint_type_group'])
waterindep['waterpoint_type'].value_counts().plot(kind='bar',title='Waterpoint_Type', ax=ax1)
waterindep['waterpoint_type_group'].value_counts().plot(kind='bar',title='Waterpoint_Type_Group', ax=ax2)
plt.show()
Обратите внимание, что вы также можете использовать
fig, axs = plt.subplots(figsize=[15,8], ncols=2)
ax1, ax2 = axs
вместо gridspec.GridSpec
для создания осей. Он будет иметь лучший вид между осями «из коробки».
Проблема состоит в том, что Вы читаете содержание файла в Строку при помощи "file.text". Содержание файла преобразовывается с системной кодировкой символов, даже если содержание является двоичным, не текст (например, файлы PDF являются двоичными), и отправленный клиенту, использующему кодирование ответа и таким образом modifing двоичное содержание. Необходимо скорее использовать другой подход как это:
def file = new File(params.fileDir)
response.setContentType("application/octet-stream")
response.setHeader("Content-disposition", "attachment;filename=${file.getName()}")
response.outputStream << file.newInputStream() // Performing a binary stream copy