मैं एक बॉक्स प्लॉट को एक लाइन प्लॉट के साथ संयोजित करने का प्रयास कर रहा हूं। मैं दोनों अलग-अलग प्लॉट प्रकारों को एक ही आकृति पर एक साथ प्रदर्शित करने में सक्षम हूं और बॉक्सप्लॉट सही एक्स-स्थानों पर हैं। हालांकि, मैं एक्स-टिक्स को समायोजित करना चाहता हूं ताकि पूरे एक्स-अक्ष को नियमित अंतराल पर फैलाया जा सके। मुझे टिक स्थानों को बदलने के लिए xlim और xticks का उपयोग करने में कोई भाग्य नहीं है - मुझे लगता है कि बॉक्स प्लॉट वहां चीजों को गड़बड़ कर रहा है। मैंने भूखंडों को अलग से ओवरले करने की कोशिश की है, लेकिन मुझे अभी भी कोई भाग्य नहीं है। नीचे आप उस कोड को देख सकते हैं जिसे मैं दो भूखंडों को ओवरले करने के लिए लागू करने का प्रयास कर रहा हूं।

h = [0.39, 0.48, 0.58, 0.66, 0.78, 0.94]
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
ax1.plot(h, avg00, '--ko', label='GSE')
ax2.boxplot(phi00, widths=0.05, positions=h, showmeans=True)
ax1.set_xticks(np.arange(0.3, 1.1, 0.1))
ax1.set_xlim(0.3,1.0)
ax1.set_ylim(74,79)
ax2.set_ylim(74,79)
ax2.set_yticks([])
ax1.legend()
plt.show()

जो, हाथ में डेटा के साथ, निम्न छवि बनाता है: ओवरले xy-प्लॉट और बॉक्सप्लॉट

किसी भी तरह की सहायता का स्वागत किया जाएगा। धन्यवाद!!!!

2
Bocephus85 13 सितंबर 2020, 04:08

1 उत्तर

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

डिफ़ॉल्ट रूप से, बॉक्सप्लॉट टिक स्थिति के साथ-साथ लेबल और उनके प्रारूप को बदलता है। आप इसे पैरामीटर manage_ticks=False के माध्यम से दबा सकते हैं।

वैकल्पिक रूप से, आप स्पष्ट रूप से एक लोकेटर और एक फ़ॉर्मेटर भी सेट कर सकते हैं, उदाहरण के लिए MultipleLocator और ScalarFormatter। ध्यान दें कि इस मामले में twinx() अक्ष कोई मूल्य नहीं जोड़ता है, लेकिन केवल मामलों को जटिल करता है।

import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator, ScalarFormatter
import numpy as np

phi00 = np.random.normal(76.5, 0.7, (20, 6))
avg00 = phi00.mean(axis=0)
h = [0.39, 0.48, 0.58, 0.66, 0.78, 0.94]
fig, ax1 = plt.subplots()
ax1.plot(h, avg00, '--ko', label='GSE')
ax1.boxplot(phi00, widths=0.05, positions=h, showmeans=True, manage_ticks=False)
# ax1.xaxis.set_major_locator(MultipleLocator(0.1))
# ax1.xaxis.set_major_formatter(ScalarFormatter())
ax1.set_xlim(0.3, 1.0)
ax1.set_ylim(74, 79)
ax1.legend()
plt.show()

example plot

1
JohanC 13 सितंबर 2020, 17:29