2013-07-29 9 views
8

पर ग्रिडलाइन समायोजित करना मैं प्रस्तुति के लिए तैयार हो रहा हूं और मेरे पास 3 डी matplotlib आंकड़ों के कुछ उदाहरण आंकड़े हैं। हालांकि, अनुमानित छवियों पर देखने के लिए ग्रिडलाइन बहुत हल्की हैं। example 3D image3 डी Matplotlib चित्र

मैं ग्रिड विधि है कि 2 डी आंकड़े के लिए काम करता है उपयोग करने की कोशिश:

points = (5*np.random.randn(3, 50)+np.tile(np.arange(1,51), (3, 1))).transpose() 
fig = plt.figure(figsize = (10,10)) 
ax = fig.add_subplot(111, projection='3d') 
ax.scatter(points[:,0], points[:,1], points[:,2]) 
ax.view_init(elev=0., azim=0) 
ax.set_ylim([0, 60]) 
ax.set_zlim([0, 60]) 
ax.set_xlim([0, 60]) 
ax.set_zlabel('Cytokine') 
ax.set_ylabel('Parameter') 
ax.grid(linewidth=20) 

लेकिन वह 3 डी आंकड़े के लिए काम करने के लिए प्रतीत नहीं होता। कोई सुझाव?

उत्तर

3

दुर्भाग्य से ऐसा प्रतीत नहीं होता है। स्रोत को देखते हुए, मुख्य आंतरिक चर _AXINFO पर कॉल करता है जिसे हम सावधानीपूर्वक उप-वर्गीकरण से ओवरराइड कर सकते हैं।

enter image description here

dict custom_AXINFO साथ यह शैली के बाद अपने आंकड़ा बनाई गई है यह कोड जोड़ें, और:

from mpl_toolkits.mplot3d import Axes3D 
import mpl_toolkits.mplot3d.axis3d as axis3d 

# New axis settings 
custom_AXINFO = { 
    'x': {'i': 0, 'tickdir': 1, 'juggled': (1, 0, 2), 
      'color': (0.00, 0.00, 0.25, .75)}, 
    'y': {'i': 1, 'tickdir': 0, 'juggled': (0, 1, 2), 
      'color': (0.20, 0.90, 0.90, 0.25)}, 
    'z': {'i': 2, 'tickdir': 0, 'juggled': (0, 2, 1), 
      'color': (0.925, 0.125, 0.90, 0.25)},} 

class custom_XAxis(axis3d.Axis): 
    _AXINFO = custom_AXINFO 

class custom_YAxis(axis3d.Axis): 
    _AXINFO = custom_AXINFO 

class custom_ZAxis(axis3d.Axis): 
    _AXINFO = custom_AXINFO 

class custom_Axes3D(Axes3D): 
    def _init_axis(self): 
     '''Init 3D axes; overrides creation of regular X/Y axes''' 
     self.w_xaxis = custom_XAxis('x', self.xy_viewLim.intervalx, 
            self.xy_dataLim.intervalx, self) 
     self.xaxis = self.w_xaxis 
     self.w_yaxis = custom_YAxis('y', self.xy_viewLim.intervaly, 
          self.xy_dataLim.intervaly, self) 
     self.yaxis = self.w_yaxis 
     self.w_zaxis = custom_ZAxis('z', self.zz_viewLim.intervalx, 
          self.zz_dataLim.intervalx, self) 
     self.zaxis = self.w_zaxis 

     for ax in self.xaxis, self.yaxis, self.zaxis: 
      ax.init3d() 

# The rest of your code below, note the call to our new custom_Axes3D 

points = (5*np.random.randn(3, 50)+np.tile(np.arange(1,51), (3, 1))).transpose() 
fig = plt.figure(figsize = (10,10)) 
ax = custom_Axes3D(fig) 

इस बंदर-पैच है पर यह सबसे खराब है, और पर भरोसा नहीं किया जाना चाहिए बाद के संस्करणों के लिए काम करते हैं।

चेहरे के रंगों को ठीक करना ग्रिड लाइनों से आसान था, क्योंकि इसे __init__ विधियों में से एक के ओवरराइड की आवश्यकता होती है, हालांकि इसे और अधिक काम के साथ किया जा सकता है।

इसे अंतिम उपयोगकर्ता को बेनकाब करना मुश्किल नहीं लगता है, और जैसा कि मैं कल्पना कर सकता हूं कि इसे बाद के संस्करणों में ठीक किया जा सकता है।

+0

ऐसा लगता है कि आप ax.w_xaxis.plane.set_color ((1,0,0)) कर सकते हैं; ax.w_xaxis.plane.set_alpha (0.5)। ऐसा लगता है कि यह set_color में अल्फा चैनल को अनदेखा करता है लेकिन set_alpha में से एक का उपयोग करता है। – Ben

16

यदि आपको सभी लाइनों को मोटा होना कोई फर्क नहीं पड़ता है तो आप डिफ़ॉल्ट आरसी सेटिंग्स को समायोजित कर सकते हैं।

enter image description here

हम जोड़ सकते हैं::

import matplotlib as mpl 
mpl.rcParams['lines.linewidth'] = 2 

सभी लाइनों के डिफ़ॉल्ट पंक्ति चौड़ाई बढ़ाने के लिए, का एक परिणाम दे रही है:

enter image description here

जैसे एक ग्राफ को देखते हुए

वैकल्पिक atively, अगर आप इस बदसूरत लग रहा है लग रहा है, आप इस्तेमाल कर सकते हैं:

ax.w_xaxis.gridlines.set_lw(3.0) 
ax.w_yaxis.gridlines.set_lw(3.0) 
ax.w_zaxis.gridlines.set_lw(3.0) 

3,0 करने के लिए प्रत्येक अक्ष की लाइन चौड़ाई समायोजित करने, उत्पादन:

enter image description here

आदेश में रंग अद्यतन करने के लिए है, तो ग्रिड लाइनों वास्तव में पॉप, आप जोड़ सकते हैं:

ax.w_xaxis._axinfo.update({'grid' : {'color': (0, 0, 0, 1)}}) 
ax.w_yaxis._axinfo.update({'grid' : {'color': (0, 0, 0, 1)}}) 
ax.w_zaxis._axinfo.update({'grid' : {'color': (0, 0, 0, 1)}}) 

कौन सा पैदा करता है:

enter image description here

विधियां बहुत हैकी हैं, लेकिन जहां तक ​​मुझे पता है कि इन परिणामों को प्राप्त करने का कोई आसान तरीका नहीं है !! उम्मीद है की यह मदद करेगा; अगर आपको कोई और सहायता की आवश्यकता है तो मुझे बताएं!

+0

@ जुडोविल - अगर आपको यह समस्या ठीक हो जाती है तो आपको यह जवाब स्वीकार करना चाहिए! – Jamie

संबंधित मुद्दे