मुझे xticks को ओवरलैप करने में समस्या है। मुझे अपने प्लॉट में बहुत सारे xticks फिट करने हैं, और हर टिक एक अर्थपूर्ण स्ट्रिंग है, इसलिए मैं कुछ बाहर नहीं छोड़ सकता। मैंने xticks को 90° से पहले ही घुमा दिया है

axis.tick_params(axis ='x', rotation = -90)

और मुझे सभी प्रमुख xticks को y-Shift देने का समाधान मिला:

axis.tick_params(axis='x', which='major', pad=10)

दुर्भाग्य से, मेरे सभी टिक प्रमुख टिक हैं, और मुझे नहीं पता कि इसे कैसे हल किया जाए। अंत में मैं चाहता हूं कि हर दूसरा xtick y-दिशा में स्थानांतरित हो जाए, ताकि टिक किसी भी अधिक ओवरलैप न हों।

मुझे आपके साथ पूरा कोड साझा करने की अनुमति नहीं है, लेकिन अब यह कैसा दिखता है इसका एक अंश यहां दिया गया है:

enter image description here

0
And 15 जून 2020, 12:44

1 उत्तर

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

सामान्य तौर पर आप एक FuncFormatter एक साथ cycle ऑब्जेक्ट के साथ

In [49]: import numpy as np 
    ...: import matplotlib 
    ...: import matplotlib.pyplot as plt 
    ...: from itertools import cycle 
    ...: %matplotlib tk 
    ...:  
    ...: format_cycle = cycle(['% 3.1f', '% 10.1f', '% 17.1f', '% 10.1f']) 
    ...: @matplotlib.ticker.FuncFormatter 
    ...: def major_formatter(x,pos): return next(format_cycle)%x                          

In [50]: fig, ax = plt.subplots() 
    ...: t = np.linspace(0,6.28, 629) 
    ...: ax.plot(t, np.sin(t)) 
    ...: ax.set_xticks(np.arange(0,6.3, 0.1)) 
    ...: ax.tick_params(axis='x', rotation=-90) 
    ...: ax.xaxis.set_major_formatter(major_formatter) 
    ...: fig.tight_layout()                                                               

In [51]:                                                                                  

enter image description here

आपके उपयोग के मामले में आपके पास पहले से ही लेबल हैं? और इसलिए उन्हें ax.set_xticklabels पास करने से पहले उन्हें उचित संख्या में रिक्त स्थान के साथ तैयार करने का मामला है

spaces = cycle(['', '   ', '      ', '   ']) # 0, 3, 6, 3 spaces
ax.set_xticklabels([next(spaces)+label for label in labels])
1
gboffi 15 जून 2020, 12:07