2014-07-03 10 views
10

डिफ़ॉल्ट matplotlib ग्राफ वास्तव में अनैतिक और यहां तक ​​कि व्यावसायिक भी दिखते हैं। मैंने कुछ पैकेजों में सेबर्न के साथ-साथ prettyplotlib शामिल करने की कोशिश की लेकिन इनमें से दोनों मुश्किल से शैलियों में सुधार करते हैं।matplotlib ग्राफ कैसे बनाने के लिए पेशेवर इस तरह से दिखते हैं?

अब तक मैं Seaborn पैकेज का उपयोग करने के लिए निम्नलिखित मिल गया है:

enter image description here

:

enter image description here

नीचे उपस्थिति मैं देख रहा हूँ जिसके लिए ऊपर से एकदम अलग है दूसरे उदाहरण में निम्नलिखित नीचता पर ध्यान दें:

  1. ग्राफ के नीचे क्षेत्र अधिक आंखों के सुखदायक रंग से भरा है।
  2. ग्राफ लाइन विचारक है और अच्छी तरह से खड़ा है।
  3. एक्सिस लाइनें विचारक हैं और फिर अच्छी तरह से खड़े हैं।
  4. वक्र के नीचे क्षेत्र पारदर्शी है।
  5. एक्स-एक्सिस टिक अंक अधिक घनत्व हैं।

मेरे प्रश्न हैं: क्या आप ऊपर किसी प्रकार की लोकप्रिय थीम या शैली के रूप में पहचानते हैं जिसे मैं जल्दी से matplotlib में उपयोग कर सकता हूं? या अगर मैं कुछ पैकेज से उपयोग कर सकता हूं? यह असफल रहा, क्या इस शैली को मेरी वैश्विक प्राथमिकता के रूप में स्थापित करने के लिए वैसे भी है? यह विफल हो रहा है, क्या यह matlibplot में ऐसा करना भी संभव है?

धन्यवाद!

+7

मैं नीचे एक पेशेवर किया फोन नहीं होता। ऐसा लगता है कि एक्सेल से बाहर आया था। – tacaswell

उत्तर

15

यह वास्तव में स्वाद का विषय है, और लक्षित दर्शकों का विषय भी है। matplotlib वैज्ञानिक उद्देश्यों के लिए स्पष्ट चित्र प्रस्तुत करने का प्रयास करता है। यह जरूरी है - एक समझौता, और चित्र कुछ ऐसी चीज नहीं हैं जो आप किसी पत्रिका में प्रिंट करेंगे या किसी विज्ञापन में दिखाएंगे।

इस अर्थ में matplotlib के बारे में कुछ अच्छी खबरें और कुछ बुरी खबरें हैं।

बुरी खबर:

  • कोई भी जादुई आदेश या पैकेज है जो matplotlib के साथ सुंदर भूखंडों बनाना होगा नहीं है।

अच्छी खबर:

  • वहाँ डिफ़ॉल्ट सेटिंग में बदलाव करने के लिए सरल तरीके हैं, देखें: http://matplotlib.org/users/customizing.html
  • ऑब्जेक्ट मॉडल लगभग सब कुछ बदल सकते हैं और जटिल नई सुविधाएं प्रदान करने के लिए उपयोगकर्ता सक्षम बनाता है।
  • स्रोत कोड उपलब्ध है, और यहां तक ​​कि इसे उपयोगकर्ता द्वारा आसानी से बदला जा सकता है।

मेरी राय में सबसे कठिन बात यह तय करना है कि आप क्या चाहते हैं। फिर जो भी आप चाहते हैं वह करना आसान है, भले ही शुरुआत में एक तेज सीखने की वक्र है।

बस एक उदाहरण के रूप

:

import numpy as np 
import matplotlib.pyplot as plt 


# create some fictive access data by hour 
xdata = np.arange(25) 
ydata = np.random.randint(10, 20, 25) 
ydata[24] = ydata[0] 

# let us make a simple graph 
fig = plt.figure(figsize=[7,5]) 
ax = plt.subplot(111) 
l = ax.fill_between(xdata, ydata) 

# set the basic properties 
ax.set_xlabel('Time of posting (US EST)') 
ax.set_ylabel('Percentage of Frontpaged Submissions') 
ax.set_title('Likelihood of Reaching the Frontpage') 

# set the limits 
ax.set_xlim(0, 24) 
ax.set_ylim(6, 24) 

# set the grid on 
ax.grid('on') 

(बस एक टिप्पणी: मूल छवि में X- अक्ष सीमा को ध्यान में डेटा की cyclicity नहीं लेते।)

यह हमें दे देंगे कुछ इस तरह:

enter image description here

यह आसान है समझने के लिए कि हम आदेश को यह दिखाने के लिए सक्षम होने के लिए में परिवर्तन का एक बहुत कुछ करने की जरूरत है एक कम इंजीनियरिंग-दिमागी दर्शक। कम से कम:

  • रंग में भरने पारदर्शी और कम आक्रामक बनाने
  • लाइन मोटा
  • परिवर्तन लाइन रंग
  • के फोंट परिवर्तन एक्स अक्ष के लिए और अधिक टिक जोड़ें खिताब

# change the fill into a blueish color with opacity .3 
l.set_facecolors([[.5,.5,.8,.3]]) 

# change the edge color (bluish and transparentish) and thickness 
l.set_edgecolors([[0, 0, .5, .3]]) 
l.set_linewidths([3]) 

# add more ticks 
ax.set_xticks(np.arange(25)) 
# remove tick marks 
ax.xaxis.set_tick_params(size=0) 
ax.yaxis.set_tick_params(size=0) 

# change the color of the top and right spines to opaque gray 
ax.spines['right'].set_color((.8,.8,.8)) 
ax.spines['top'].set_color((.8,.8,.8)) 

# tweak the axis labels 
xlab = ax.xaxis.get_label() 
ylab = ax.yaxis.get_label() 

xlab.set_style('italic') 
xlab.set_size(10) 
ylab.set_style('italic') 
ylab.set_size(10) 

# tweak the title 
ttl = ax.title 
ttl.set_weight('bold') 

अब हमारे पास:

enter image description here

इस सवाल की ही तरह बिल्कुल नहीं है, लेकिन सब कुछ है कि दिशा की ओर देखते जा सकता है। यहां सेट की गई कई चीजें matplotlib के लिए डिफ़ॉल्ट के रूप में सेट की जा सकती हैं। शायद यह भूखंडों में चीजों को बदलने के बारे में एक विचार देता है।

+0

धन्यवाद। उदाहरण के लिए बॉक्स ग्रेश के शीर्ष और दाएं किनारे बनाने का कोई तरीका है? – ShitalShah

+1

@ShitalShah: वहां है, कोड देखें। कीवर्ड "रीढ़" है (जो अनुमान लगाने में थोड़ा मुश्किल हो सकता है)। – DrV

2

matplotlib लगभग असीम रूप से लचीला है ताकि आप इसके साथ लगभग कुछ भी कर सकें और यदि यह अस्तित्व में नहीं है तो आप इसे स्वयं लिख सकते हैं! जाहिर है कि चूक ब्लेंड हैं, ऐसा इसलिए है क्योंकि हर किसी के पास "अच्छा" क्या है इसका विचार है, इसलिए यह एक पूर्वनिर्धारित शैली को लागू करने के लिए व्यर्थ है।

यहां एक बहुत ही सरल उदाहरण है जो आपके 4 अंकों को संबोधित करता है।

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

x = np.linspace(-10, 10, 1000) 
y = 1+np.sinc(x) 

ax = plt.subplot(111) 
ax.plot(x, y, lw=2) 
ax.fill_between(x, 0, y, alpha=0.2) 
ax.grid() 

majorLocator = MultipleLocator(1) 
ax.xaxis.set_major_locator(majorLocator) 

plt.show() 

enter image description here

डिफ़ॉल्ट सेट करने के लिए अपने चाहते हैं तो अपने सभी भूखंडों ही दिखाई तो आप एक कस्टम matplotlibrc file उत्पन्न करनी चाहिए। एक उपयोगी guide is here। सभी उपलब्ध विकल्पों की सूची देखने के लिए बस एक इंटरैक्टिव टर्मिनल से print plt.rcParams पर कॉल करें।

भरने जैसी कुछ अन्य सुविधाएं प्रति साजिश के आधार पर करने की आवश्यकता होगी। आप इसे एक फ़ंक्शन बनाकर अपने काम में मानकीकृत कर सकते हैं जो अक्ष इनपुट और डेटा जैसे कुछ इनपुट के बीच भर को जोड़ता है।

6

अपनी पसंद की शैली के करीब आने के लिए, आप whitegrid शैली को समुद्री तट में उपयोग कर सकते हैं। जैसा कि अन्य उत्तरों ने नोट किया है, आप alpha पैरामीटर fill_between पर भरने की पारदर्शिता को नियंत्रित करते हैं।

import numpy as np 
import seaborn as sns 
import matplotlib.pyplot as plt 
sns.set_style("whitegrid") 

blue, = sns.color_palette("muted", 1) 

x = np.arange(23) 
y = np.random.randint(8, 20, 23) 

fig, ax = plt.subplots() 
ax.plot(x, y, color=blue, lw=3) 
ax.fill_between(x, 0, y, alpha=.3) 
ax.set(xlim=(0, len(x) - 1), ylim=(0, None), xticks=x) 
Seaborn शैलियों पर

enter image description here

अधिक जानकारी docs में पाया जा सकता।

1

आप इस प्रकार भूखंडों शैली को अनुकूलित कर सकते हैं:

import numpy as np 
import matplotlib.pyplot as plt 
plt.use_style('ggplot') # customize your plots style 
x = np.linspace(0,2*np.pi,100) 
y = np.sin(x) 
plt.fill_between(x,y) 
plt.show() 
संबंधित मुद्दे