Encounter a problem, how to rename existing xticklabels in lineplot using dictionary ? Part of code:
zodiac_order = ['Aries', 'Taurus', 'Gemini', 'Cancer', 'Leo', 'Virgo', 'Libra', 'Scorpio','Sagittarius', 'Capricorn', 'Aquarius', 'Pisces'] # df_one here is DataFrame
zodiac_counts = df_one["Zodiac"].value_counts()
plt.figure(figsize=(14,6))
zodiac = sns.lineplot(data=zodiac_counts, marker='o', color='mediumvioletred')
zodiac.yaxis.grid(True)
[plt.gca().spines[loc].set_visible(False) for loc in ['top', 'right']]
zodiac.set(xticklabels=zodiac_order) # made list to be in order according to real list of zodiacs
I want to change language of xticks labels, so have dictionary
zodiacs_lt = {'Aries': 'Avinas',
'Taurus': 'Jautis',
'Gemini': 'Dvyniai',
'Cancer': 'Vėžys',
'Leo': 'Liūtas',
'Virgo': 'Mergelė',
'Libra': 'Svarstyklės',
'Scorpio': 'Skorpionas',
'Sagittarius': 'Šaulys',
'Capricorn': 'Ožiaragis',
'Aquarius': 'Vandenis',
'Pisces': 'Žuvys'
}
I assume your data are in a dataframe like this df
:
zodiac_order = ['Aries', 'Taurus', 'Gemini', 'Cancer', 'Leo', 'Virgo', 'Libra', 'Scorpio','Sagittarius', 'Capricorn', 'Aquarius', 'Pisces']
df = pd.DataFrame({'signs': zodiac_order,
'values': [6, 1, 6, 5, 6, 8, 1, 6, 4, 1, 5, 1]})
output:
signs values
0 Aries 6
1 Taurus 1
2 Gemini 6
3 Cancer 5
4 Leo 6
5 Virgo 8
6 Libra 1
7 Scorpio 6
8 Sagittarius 4
9 Capricorn 1
10 Aquarius 5
11 Pisces 1
you can add a new column to this dataframe with the translated names of zodiac's signs:
zodiacs_lt = {'Aries': 'Avinas',
'Taurus': 'Jautis',
'Gemini': 'Dvyniai',
'Cancer': 'Vėžys',
'Leo': 'Liūtas',
'Virgo': 'Mergelė',
'Libra': 'Svarstyklės',
'Scorpio': 'Skorpionas',
'Sagittarius': 'Šaulys',
'Capricorn': 'Ožiaragis',
'Aquarius': 'Vandenis',
'Pisces': 'Žuvys'}
df['new_signs'] = list(map(lambda x: zodiacs_lt[x], df['signs']))
output:
signs values new_signs
0 Aries 6 Avinas
1 Taurus 1 Jautis
2 Gemini 6 Dvyniai
3 Cancer 5 Vėžys
4 Leo 6 Liūtas
5 Virgo 8 Mergelė
6 Libra 1 Svarstyklės
7 Scorpio 6 Skorpionas
8 Sagittarius 4 Šaulys
9 Capricorn 1 Ožiaragis
10 Aquarius 5 Vandenis
11 Pisces 1 Žuvys
Then you can proceed to plot by using new_signs
column:
plt.figure(figsize=(14,6))
zodiac = sns.lineplot(data=df, x='new_signs', y='values', marker='o', color='mediumvioletred', sort=False)
zodiac.yaxis.grid(True)
[plt.gca().spines[loc].set_visible(False) for loc in ['top', 'right']]
plt.show()
which gives:
Note:
I deleted the line
zodiac.set(xticklabels=zodiac_order) # made list to be in order according to real list of zodiacs
which may cause bugs, I realized the same functionality with the sort=False
parameter in the sns.lineplot