[FIXED] Exponentialdarstellung des Jahres mit sns.lineplot

Ausgabe

Ich muss ein Liniendiagramm für das Jahr 2019 und 2020 zeichnen und habe es mit sns.barplot erreicht, aber wie ich bereits erwähnt habe, muss ich dies mit einem Liniendiagramm anzeigen

dfyear=df[(df['Year'] == 2019) | (df['Year'] == 2020)]
sns.lineplot(data=dfyear, x="Year", y="How_many_Landed_on_the_our_Page_and_clicked_on_a_button?", 
              hue="Which_Place_in_India?")

Geben Sie hier die Bildbeschreibung ein

für die das Problem, das auftritt, mit der Exponentialdarstellung des Jahres zusammenhängt, in der ich möchte, dass nur 2019 und 2020 auf der x-Achse angezeigt werden, und ich habe versucht, dies mit den folgenden Methoden zu erreichen, aber das Diagramm wird immer noch in Exponentialform dargestellt.

plt.ticklabel_format(style='plain', axis='x')

und

from matplotlib.ticker import ScalarFormatter, FormatStrFormatter

ax.xaxis.set_major_formatter(FormatStrFormatter('%.0f'))

Geben Sie hier die Bildbeschreibung ein

Lösung

Sie können dies erreichen, indem Sie einfach die Werte in umwandeln dfyear.Yearin strings:

dfyear.Year = dfyear.Year.astype(str)

Oder wir können dies direkt an weiterleiten sns.lineplot, wie in den Kommentaren von @mwaskom erwähnt :

sns.lineplot(data=dfyear.astype({'Year':str}), x="Year", 
           y="Page visits & button clicked", 
          hue="Place")

Beispiel dfmit einigen zufälligen Daten:

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

rngs = np.random.choice([*np.arange(1E5,6E5,0.5E5)],10, replace=False)
cities = ['Bangalore', 'Chennai', 'Dehradun', 'Indore', 'Pune']

rng = []
for i in range(0,10,2):
    lst = rngs[i:i+2]
    low, high = np.min(lst), np.max(lst)
    rands = list(np.random.randint(low=low, high=high, size=100))
    rng.extend(rands)

data = {'Page visits & button clicked': rng, 'Place': np.repeat(cities, 100),
     'Year': np.tile(np.repeat([*range(2018,2022)],25), 5)}
    
df = pd.DataFrame(data)

print(df.head())
   Page visits & button clicked      Place  Year
0                        286733  Bangalore  2018
1                        417111  Bangalore  2018
2                        268098  Bangalore  2018
3                        253824  Bangalore  2018
4                        398087  Bangalore  2018

Holen Sie sich jetzt das 2019-2020-Slice, ändern Sie das dtypeund wenden Sie es an sns.lineplot:

dfyear = df[df.Year.isin(range(2019,2021))].copy() 
# copy isn't necessary, since `astype` creates a copy itself, but 
# for me at least it suppresses a `SettingWithCopyWarning`

dfyear.Year = dfyear.Year.astype(str)
ax = sns.lineplot(data=dfyear, x="Year", 
           y="Page visits & button clicked", 
          hue="Place")
sns.move_legend(ax, "upper left", bbox_to_anchor=(1, 1))
plt.show()

# as mentioned above, also possible to simply use:
# `data=dfyear.astype({'Year':str})`

Zufallsergebnis:

zufälliges Liniendiagramm


Beantwortet von –
ouroboros1


Antwort geprüft von –
Pedro (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like