Как объединить 2 графика в 1 ячейке, Python?

#python #matplotlib #yellowbrick

#python #matplotlib #желтый кирпич

Вопрос:

Не могли бы вы изменить мой код таким образом, чтобы эти 2 графика были рядом, то есть в 1 строке и 2 столбцах (nrows подзаголовка = 1, ncols = 2)? В настоящее время у меня есть эти диаграммы в 2 отдельных ячейках, и я хочу, чтобы они были в 1.

мой код: первый график:

 from yellowbrick.classifier import (PrecisionRecallCurve)
fig, ax = plt.subplots(figsize=(10, 6))
viz = PrecisionRecallCurve(DecisionTreeClassifier(max_depth=4))
viz.fit(X_train_model_2, y_train_model_2)
print(viz.score(X_test_model_2, y_test_model_2))
viz.ax.set(title="Krzywa precyzja-czułość klasyfikatora drzewa losowego",
           xlabel="Czułość",
           ylabel="Precyzja")
ax.legend(("Binarna krzywa precyzja-czułość",
           "Średnia precyzja = {:0.2f}".format(viz.score(X_test_model_2,y_test_model_2))),
          frameon=True,
          loc="lower left")

plt.show()
  

Второй график:

 import scikitplot as skplt
fig, ax = plt.subplots(figsize=(10, 6))
y_probas = decision_tree.predict_proba(X_test_model_2)
skplt.metrics.plot_cumulative_gain(y_test_model_2,
                                   y_probas,
                                   ax=ax)
ax.set(title="Krzywa skumulowanych zysków",
       xlabel="Odsetek próbek",
       ylabel="Zysk")
ax.legend(("Klasa 0",
           "Klasa 1",
           "Krzywa odniesienia"),
          frameon=True,
          loc="lower right")
plt.show()
  

Ответ №1:

Может быть, это помогает:

 from yellowbrick.classifier.prcurve import PrecisionRecallCurve                                                                                                                                          
import scikitplot as skplt
import numpy as np
import sklearn
import sklearn.tree
import matplotlib.pyplot as plt

#generate some test data
X = np.arange(200) np.random.normal(0,10,200)
y = np.array([True if (x <100) and (x > 50) else False for x in X])
X = X.reshape(-1,1)

X_train_model_2 = []
y_train_model_2 = []
X_test_model_2 = []
y_test_model_2 = []

X_train_model_2,X_test_model_2,y_train_model_2,y_test_model_2=
sklearn.model_selection.train_test_split(
                                         X, y,
                                         test_size=0.4,
                                         random_state=0)

fig, (ax1, ax2) = plt.subplots(1,2)  #1 row, 2 columns

viz = PrecisionRecallCurve(sklearn.tree.DecisionTreeClassifier(max_depth=4),
      ax = ax1) #set the axis to plot one (ax1)
decision_tree = viz.fit(X_train_model_2, y_train_model_2)
print(viz.score(X_test_model_2, y_test_model_2))

#Set the attributes for plot one
ax1.set(title="Krzywa precyzja-czułość klasyfikatora drzewa losowego",
        xlabel="Czułość",
        ylabel="Precyzja")
ax1.legend(("Binarna krzywa precyzja-czułość",
        "Średnia precyzja  {:0.2f}".format(viz.score(X_test_model_2,y_test_model_2))),
        frameon=True,
        loc="lower left")
y_probas = decision_tree.predict_proba(X_test_model_2)

skplt.metrics.plot_cumulative_gain(y_test_model_2,
                                   y_probas,
                                   ax=ax2) #set the axis to plot two (ax2)

#Set the attributes for plot two
ax2.set(title="Krzywa skumulowanych zysków",
        xlabel="Odsetek próbek",
        ylabel="Zysk")
ax2.legend(("Klasa 0",
            "Klasa 1",
            "Krzywa odniesienia"),
            frameon=True,
            loc="lower right")
#Show the whole plot
plt.show()