ग्रिड अंतराल बदलें और Matplotlib में टिक लेबल निर्दिष्ट करें


84

मैं ग्रिड वाले भूखंडों में मायने रखने की कोशिश कर रहा हूं, लेकिन मैं यह पता लगाने में सक्षम नहीं हूं कि मैं इसके बारे में कैसे जाऊंगा। में चाहता हूं:

  1. 5 के अंतराल पर बिंदीदार ग्रिड रखें

  2. केवल हर 20 में प्रमुख टिक लेबल रखें

  3. मैं चाहता हूं कि साजिश प्लॉट के बाहर हो।

  4. उन ग्रिड के अंदर "मायने रखता है"

मैंने यहां और यहां जैसे संभावित डुप्लिकेट की जांच की है , लेकिन मैं इसका पता नहीं लगा पाया हूं।

यह मेरा कोड है।

import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator, FormatStrFormatter

for key, value in sorted(data.items()):
    x = value[0][2]
    y = value[0][3]
    count = value[0][4]

    fig = plt.figure()
    ax = fig.add_subplot(111)

    ax.annotate(count, xy = (x, y), size = 5)
    # Overwrites and I only get the last data point

    plt.close()
    # Without this, I get "fail to allocate bitmap" error

plt.suptitle('Number of counts', fontsize = 12)
ax.set_xlabel('x')
ax.set_ylabel('y')
plt.axes().set_aspect('equal')

plt.axis([0, 1000, 0, 1000])
# This gives an interval of 200

majorLocator   = MultipleLocator(20)
majorFormatter = FormatStrFormatter('%d')
minorLocator   = MultipleLocator(5)
# I want minor grid to be 5 and major grid to be 20
plt.grid()

filename = 'C:\Users\Owl\Desktop\Plot.png'
plt.savefig(filename, dpi = 150)
plt.close()

यही मुझे मिलता है।

यही मुझे मिलता है।

मुझे डेटा पॉइंट्स को ओवरराइट करने की भी समस्या है। किसी को भी इस समस्या के साथ मेरी मदद कर सकते हैं?

जवाबों:


194

आपके कोड में कई समस्याएं हैं।

पहले बड़े लोग:

  1. आप अपने लूप के प्रत्येक पुनरावृत्ति → लूप में fig = plt.figureऔर ax = fig.add_subplot(1,1,1)बाहर एक नई आकृति और एक नई कुल्हाड़ी बना रहे हैं ।

  2. लोकेटर का उपयोग न करें। फ़ंक्शन ax.set_xticks()और ax.grid()सही कीवर्ड के साथ कॉल करें ।

  3. आपके साथ plt.axes()फिर से एक नई कुल्हाड़ी बना रहे हैं। का उपयोग करें ax.set_aspect('equal')

मामूली बातें: आप plt.axis()उद्देश्य वाक्यविन्यास के साथ MATLAB की तरह वाक्यविन्यास मिश्रण नहीं करना चाहिए । का उपयोग करें ax.set_xlim(a,b)औरax.set_ylim(a,b)

यह एक कार्यशील न्यूनतम उदाहरण होना चाहिए:

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)

# Major ticks every 20, minor ticks every 5
major_ticks = np.arange(0, 101, 20)
minor_ticks = np.arange(0, 101, 5)

ax.set_xticks(major_ticks)
ax.set_xticks(minor_ticks, minor=True)
ax.set_yticks(major_ticks)
ax.set_yticks(minor_ticks, minor=True)

# And a corresponding grid
ax.grid(which='both')

# Or if you want different settings for the grids:
ax.grid(which='minor', alpha=0.2)
ax.grid(which='major', alpha=0.5)

plt.show()

आउटपुट यह है:

परिणाम


2
अपने जवाब के लिए आपको बहुत बहुत धन्यवाद! आपने मेरे मुद्दों को हल कर दिया! टिक्स को बाहर सेट करने के लिए, मुझे बस ax.tick_params (जो = 'दोनों', दिशा = 'आउट') जोड़ना होगा।
उल्लू

32

MaxNoe के जवाब का एक सूक्ष्म विकल्प जहां आप स्पष्ट रूप से टिक्स सेट नहीं कर रहे हैं, बल्कि ताल सेट कर रहे हैं।

import matplotlib.pyplot as plt
from matplotlib.ticker import (AutoMinorLocator, MultipleLocator)

fig, ax = plt.subplots(figsize=(10, 8))

# Set axis ranges; by default this will put major ticks every 25.
ax.set_xlim(0, 200)
ax.set_ylim(0, 200)

# Change major ticks to show every 20.
ax.xaxis.set_major_locator(MultipleLocator(20))
ax.yaxis.set_major_locator(MultipleLocator(20))

# Change minor ticks to show every 5. (20/4 = 5)
ax.xaxis.set_minor_locator(AutoMinorLocator(4))
ax.yaxis.set_minor_locator(AutoMinorLocator(4))

# Turn grid on for both major and minor ticks and style minor slightly
# differently.
ax.grid(which='major', color='#CCCCCC', linestyle='--')
ax.grid(which='minor', color='#CCCCCC', linestyle=':')

Matplotlib कस्टम ग्रिड


धन्यवाद! यह तरीका अधिक व्यावहारिक है।
एम। का।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.