Объединение объектов фигуры или подплота - PullRequest
0 голосов
/ 09 октября 2018

Я хочу создать два объекта изображения с mathplotlib через отдельные функции.И я хочу объединить эти изображения в одно изображение.

Пример:

#!/usr/bin/env python3
import matplotlib.pyplot as plt

def plot1():

   fig = plt.figure()
   plt.plot([1, 2], [1, 2], '-',color=(0,100/256,170/256))

   return fig

def plot2():

   fig = plt.figure()
   plt.plot([1, 2], [0, 3], '-',color=(0.5,0.5,0.5))

   return fig

fig = plt.figure()
fig1 = plot1
fig2 = plot2

В результате получается два изображения:

fig1.show()
fig2.show()

Но как их объединить?

fig(fig1,fig2); fig.show() 

Проблема в том, что я не хочу получать прямой доступ к (x, y) значениям - только через функции.Итак, что-то вроде:

#!/usr/bin/env python3

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2*np.pi, 400)
y = np.sin(x**2)

fig, (ax1, ax2) = plt.subplots(1, 2, sharey=True)

ax1.plot(x, y)
ax1.set_title('Sharing Y axis')
ax2.scatter(x, y)

fig.show()

не сделает этого, так как из моей скромной небольшой базы знаний, которую я имею до сих пор.Спасибо за любую помощь.

1 Ответ

0 голосов
/ 09 октября 2018

Если под слиянием вы имеете в виду построение обеих линий / функций на одном рисунке, просто определите объект plt.figure один раз.После построения графика вам не нужно возвращать какой-либо объект, поскольку построение графика будет выполняться в объекте фигуры, определенном один раз вне функции.

import matplotlib.pyplot as plt
fig = plt.figure()

def plot1():
   plt.plot([1, 2], [1, 2], '-',color=(0,100/256,170/256))
   return 

def plot2():
   plt.plot([1, 2], [0, 3], '-',color=(0.5,0.5,0.5))
   return 

plot1()
plot2()

enter image description here

Другой вариант будет

fig, axes = plt.subplots()

, а затем используйте axes для отображения внутри ваших функций как

axes.plot([1, 2], [1, 2], '-',color=(0,100/256,170/256))

Это позволит вам далее изменитьсвойства диаграммы / графика с использованием экземпляра оси axes.

Выполнение этого с помощью функции

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2*np.pi, 400)
y = np.sin(x**2)

fig, (ax1, ax2) = plt.subplots(1, 2, sharey=True)

def plot1(ax): # ax now points to ax1
    ax.plot(x, y)
    ax.set_title('Sharing Y axis')

def plot2(ax): # ax now points to ax2
    ax.scatter(x, y)    

plot1(ax1) # Pass the first axis instance 
plot2(ax2) # Pass the second axis instance 
fig.show()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...