मैं एक्स-अक्ष को प्रारूपित करने की कोशिश कर रहा हूं जहां ग्राफ़ को साफ दिखने के लिए लेबल केवल प्रत्येक 5 वें बार के नीचे दिखाई देते हैं। लेकिन मुझे जो मिल रहा है वह हर 5 वें बार में दिखने वाला टिक लगता है और इस प्रकार गलत मानों को गलत सलाखों के नीचे रखता है। क्या हर 5वें बार के बीच के वर्षों को छिपाना संभव है?

वर्तमान ग्राफ़: यहां छवि विवरण दर्ज करें

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
import seaborn as sns

# sets style of plot
plt.figure(figsize=(15,8))
sns.set(style='dark')
sns.set_context('talk')

year = [1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019]

acres = [4156000, 4478188, 3036219, 4078894, 7120768, 4197309, 2652112, 4574389, 4658586, 4231996, 6689081, 3278565, 4278472, 2641166, 1915273, 2879095, 1791327, 5109926, 3152644, 3910913, 2986826, 5260825, 4814206, 2382036, 1323666, 1148409, 2896147, 2719162, 2447296, 5009290, 1827310, 4621621, 2953578, 2069929, 1797574, 4073579, 1840546, 6065998, 2856959, 1329704, 5626093, 7393493, 3570911, 7184712, 3960842, 8097880, 8689389, 9873745, 9328045, 5292468, 5921786, 3422724, 8711367, 9326238, 4319546, 3595613, 10125149, 5509995, 10026086, 8767492, 4664364]

ax = sns.barplot(x='year', y='acres')

plt.ticklabel_format(style='plain', axis='y')
plt.xticks(rotation=45)

myLocator = mticker.IndexLocator(base = 5, offset = 0)
ax.xaxis.set_major_locator(myLocator)

ax.get_yaxis().set_major_formatter(
    mpl.ticker.FuncFormatter(lambda x, p: format(int(x), ',')))
0
prime90 22 जिंदा 2021, 22:18

1 उत्तर

सबसे बढ़िया उत्तर

इसके बजाय plt.MaxNLocator() का उपयोग करते हुए, टिकों को उस क्रम में रखें जिसकी आपको आवश्यकता है:

import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns

# sets style of plot
plt.figure(figsize=(15,8))
sns.set(style='dark')
sns.set_context('talk')

year = [1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019]

acres = [4156000, 4478188, 3036219, 4078894, 7120768, 4197309, 2652112, 4574389, 4658586, 4231996, 6689081, 3278565, 4278472, 2641166, 1915273, 2879095, 1791327, 5109926, 3152644, 3910913, 2986826, 5260825, 4814206, 2382036, 1323666, 1148409, 2896147, 2719162, 2447296, 5009290, 1827310, 4621621, 2953578, 2069929, 1797574, 4073579, 1840546, 6065998, 2856959, 1329704, 5626093, 7393493, 3570911, 7184712, 3960842, 8097880, 8689389, 9873745, 9328045, 5292468, 5921786, 3422724, 8711367, 9326238, 4319546, 3595613, 10125149, 5509995, 10026086, 8767492, 4664364]

df = pd.DataFrame({'year':year, 'acres':acres}) # did this to put the axis label

ax = sns.barplot(x=df['year'], y=df['acres'])

plt.ticklabel_format(style='plain', axis='y')
plt.xticks(rotation=45)
ax.xaxis.set_major_locator(plt.MaxNLocator(df['year'].shape[0]/4))

ax.get_yaxis().set_major_formatter(
    mpl.ticker.FuncFormatter(lambda x, p: format(int(x), ',')))

enter image description here

1
Orozco 22 जिंदा 2021, 23:10
मुझे यकीन नहीं है कि यह सही है। मुझे अभी भी गलत सलाखों के नीचे साल हो रहे हैं।
 – 
prime90
31 जिंदा 2021, 01:44