Saya mencoba membuat plot batang seaborn dengan tiga angka bertumpuk yang berbagi sumbu x dan saya ingin label centang sumbu x menjadi nama produk, diputar 90 derajat sehingga dapat dibaca.

Saya telah berhasil melakukan ini dengan plot gambar tunggal menggunakan kode berikut:

ax = plt.subplots(1, 1, figsize=(15, 7), sharex=True)


#products_bar
products_bar = sns.barplot(x=products_all.index, y=products_all['Unique Purchases'], palette="tab10")

products_bar.set_xticklabels(products_all.index)

for item in products_bar.get_xticklabels():
   item.set_rotation(90)

Namun, ketika saya mencoba mengulangi ini dengan tiga angka (yang membagi data yang sama menjadi tiga filter), label tetap keras kepala sebagai angka dari kerangka data. Ini kode-

f, (ax1, ax2, ax3) = plt.subplots(3, 1, figsize=(15, 10), sharex=True)

products_bar.set_xticklabels(organic.index)

for item in products_bar.get_xticklabels():
    item.set_rotation(45)

products_bar = sns.barplot(x=organic.index, y=organic['Unique Purchases'], palette="tab10", ax=ax1)
products_bar = sns.barplot(x=paid.index, y=paid['Unique Purchases'], palette="tab10", ax=ax2)
products_bar = sns.barplot(x=social.index, y=social['Unique Purchases'], palette="tab10", ax=ax3)

Saya tidak sepenuhnya yakin kata kunci apa yang harus dicari untuk menemukan jawabannya.

0
Christine_P 19 November 2020, 15:37

1 menjawab

Jawaban Terbaik

Karena Anda menggunakan sharex=True, Anda hanya mengubah kutu sumbu pada plot terakhir:

import pandas as pd
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt

idx = ["day"+str(i) for i in range(5)]

organic = pd.DataFrame({"Unique Purchases":np.random.randint(1,10,5)},index=idx)
paid = pd.DataFrame({"Unique Purchases":np.random.randint(1,10,5)},index=idx)
social = pd.DataFrame({"Unique Purchases":np.random.randint(1,10,5)},index=idx)

f, (ax1, ax2, ax3) = plt.subplots(3, 1, figsize=(15, 10), sharex=True)

ax1 = sns.barplot(x=organic.index, y=organic['Unique Purchases'], palette="tab10", ax=ax1)
ax2 = sns.barplot(x=paid.index, y=paid['Unique Purchases'], palette="tab10", ax=ax2)
ax3 = sns.barplot(x=social.index, y=social['Unique Purchases'], palette="tab10", ax=ax3)

ax3.tick_params(labelrotation=45)

enter image description here

0
StupidWolf 19 November 2020, 13:33