programing

매트플롯리브의 저장 그림을 사용하여 파이썬 팬더에서 생성된 저장 그림(Axes SubPlot)

stoneblock 2023. 10. 6. 20:50

매트플롯리브의 저장 그림을 사용하여 파이썬 팬더에서 생성된 저장 그림(Axes SubPlot)

팬더를 사용하여 데이터 프레임에서 플롯을 생성하고 파일에 저장하고자 합니다.

dtf = pd.DataFrame.from_records(d,columns=h)
fig = plt.figure()
ax = dtf2.plot()
ax = fig.add_subplot(ax)
fig.savefig('~/Documents/output.png')

matplotlib의 savefig를 사용하는 마지막 줄이 효과를 발휘해야 할 것 같습니다.그러나 이 코드는 다음과 같은 오류를 발생시킵니다.

Traceback (most recent call last):
  File "./testgraph.py", line 76, in <module>
    ax = fig.add_subplot(ax)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/figure.py", line 890, in add_subplot
    assert(a.get_figure() is self)
AssertionError

또는 savefig를 플롯에서 직접 호출하려고 하면 오류가 발생합니다.

dtf2.plot().savefig('~/Documents/output.png')


  File "./testgraph.py", line 79, in <module>
    dtf2.plot().savefig('~/Documents/output.png')
AttributeError: 'AxesSubplot' object has no attribute 'savefig'

savefig를 사용하려면 그림에 plot()으로 반환된 하위 플롯을 어떻게든 추가해야 할 것 같습니다.Axis SubPlot 클래스 뒤의 마법과 관련이 있는지도 궁금합니다.

편집:

다음 작품들은 (오류를 제기하지는 않지만) 빈 페이지의 이미지를 남깁니다.

fig = plt.figure()
dtf2.plot()
fig.savefig('output.png')

편집 2: 아래 코드도 잘 작동합니다.

dtf2.plot().get_figure().savefig('output.png')

gcf 메서드는 V 0.14에 설명되어 있으며 아래 코드가 저에게 적합합니다.

plot = dtf.plot()
fig = plot.get_figure()
fig.savefig("output.png")

사용가능ax.figure.savefig(), 질문에 대한 논평에서 제시한 바와 같이:

import pandas as pd

df = pd.DataFrame([0, 1])
ax = df.plot.line()
ax.figure.savefig('demo-file.pdf')

이는 다음과 같은 실질적인 이점이 없습니다.ax.get_figure().savefig()다른 답변에서 제시된 것처럼 가장 심미적으로 즐거운 옵션을 선택할 수 있습니다.실제로, 단순히 반환:

# Source from snippet linked above
def get_figure(self):
    """Return the `.Figure` instance the artist belongs to."""
    return self.figure

그래서 이 방법이 왜 작동하는지 완전히 확신할 수는 없지만 제 줄거리로 이미지를 저장합니다.

dtf = pd.DataFrame.from_records(d,columns=h)
dtf2.plot()
fig = plt.gcf()
fig.savefig('output.png')

제 원래 게시물의 마지막 토막은 팬더가 생성한 축을 얻지 못했기 때문에 공란으로 저장된 것으로 추측됩니다.위의 코드를 사용하면, gcf() 호출(get current figure)에 의해 어떤 매직 전역 상태에서 피규어 객체가 반환되며, 이는 위의 선에 표시된 축에서 자동으로 베이크됩니다.

사용하는 것은 저에게 쉬운 것 같습니다.plt.savefig()뒤에서 기능함plot()함수:

import matplotlib.pyplot as plt
dtf = pd.DataFrame.from_records(d,columns=h)
dtf.plot()
plt.savefig('~/Documents/output.png')
  • 다른 대답에서는 부분 그림이 아닌 단일 그림에 대한 그림 저장에 대해 설명합니다.
  • 하위 플롯이 있는 경우 플롯 API는 다음을 반환합니다.numpy.ndarray
import pandas as pd
import seaborn as sns  # for sample data
import matplotlib.pyplot as plt

# load data
df = sns.load_dataset('iris')

# display(df.head())
   sepal_length  sepal_width  petal_length  petal_width species
0           5.1          3.5           1.4          0.2  setosa
1           4.9          3.0           1.4          0.2  setosa
2           4.7          3.2           1.3          0.2  setosa
3           4.6          3.1           1.5          0.2  setosa
4           5.0          3.6           1.4          0.2  setosa

플롯위드

  • 다음 예제에서는 다음을 사용합니다.kind='hist', 그러나 다른 것을 지정할 때 동일한 솔루션입니다.'hist'
  • 사용하다[0]그 중 하나를 얻다axes배열에서 다음과 같은 수치를 추출합니다..get_figure().
fig = df.plot(kind='hist', subplots=True, figsize=(6, 6))[0].get_figure()
plt.tight_layout()
fig.savefig('test.png')

enter image description here

플롯위드

1:

  • 이 예제에서는 다음을 할당합니다.df.hist로.Axes에 의해 창조된plt.subplots, 그 정도는 빼고요fig.
  • 4그리고.1에 쓰입니다nrows그리고.ncols, 각각, 그러나 다음과 같은 다른 구성을 사용할 수 있습니다.2그리고.2.
fig, ax = plt.subplots(nrows=4, ncols=1, figsize=(6, 6))
df.hist(ax=ax)
plt.tight_layout()
fig.savefig('test.png')

enter image description here

2:

  • 사용하다.ravel()의 배열을 평평하게 하다Axes
fig = df.hist().ravel()[0].get_figure()
plt.tight_layout()
fig.savefig('test.png')

enter image description here

이 방법이 더 간단할 수 있습니다.

(원하는 그림).get_figure ().savefigure_name.png')

예.

dfcorr.hist(bins=50).get_figure().savefig('correlation_histogram.png')

언급URL : https://stackoverflow.com/questions/19555525/saving-plots-axessubplot-generated-from-python-pandas-with-matplotlibs-savefi