2012-05-26 24 views
7

मेरे पास डेटा का एक बड़ा सेट है जिसे मैं पैटर्न में स्पॉट करने की उम्मीद कर 3 डी में प्रतिनिधित्व करने की कोशिश कर रहा हूं। मैंने कुछ समय पढ़ा, शोध और कोडिंग बिताई है, लेकिन फिर मुझे एहसास हुआ कि मेरी मुख्य समस्या प्रोग्रामिंग नहीं है, लेकिन वास्तव में डेटा को देखने के लिए एक तरीका चुन रहा है।मैटलप्लिब या मायावी में निम्नलिखित 3 डी डेटा का प्रतिनिधित्व कैसे करेंगे?

मैटलप्लिब के mplot3d कई विकल्प प्रदान करता है (वायरफ्रेम, समोच्च, भरे समोच्च, आदि), और मायावी भी करता है। लेकिन बहुत सारे विकल्प हैं (और प्रत्येक अपने सीखने की वक्र के साथ) कि मैं व्यावहारिक रूप से खो गया हूं और नहीं जानता कि कहां से शुरू करना है! तो मेरा सवाल अनिवार्य रूप से है कि यदि आप इस डेटा से निपटना चाहते हैं तो आप किस प्लॉटिंग विधि का उपयोग करेंगे?

मेरा डेटा दिनांक-आधारित है। समय के साथ प्रत्येक बिंदु के लिए, मैं एक मूल्य (सूची 'वास्तविक') प्लॉट करता हूं।

लेकिन समय के साथ प्रत्येक बिंदु के लिए, मेरे पास ऊपरी सीमा, निचली सीमा और मध्य दूरी बिंदु भी है। ये सीमाएं और मध्यबिंदु विभिन्न विमानों में बीज पर आधारित होती हैं।

मैं बिंदु को खोजना चाहता हूं या पैटर्न को पहचानना चाहता हूं, या इससे पहले, मेरे 'वास्तविक' पढ़ने में एक बड़ा परिवर्तन होता है। क्या यह तब होता है जब सभी विमानों की ऊपरी सीमाएं मिलती हैं? या एक दूसरे से संपर्क करें? क्या यह वास्तविक मूल्य ऊपरी/मध्य/निचली सीमा को छूता है? क्या यह एक विमान में उपर दूसरे विमान के लोअर को छूता है?

कोड में मैं पेस्ट कर रहा हूं, मैंने डेटा सेट को केवल कुछ तत्वों में घटा दिया है। मैं बस सरल स्कैटर और लाइन प्लॉट का उपयोग कर रहा हूं, लेकिन डेटा सेट (और शायद mplot3d की सीमाएं) के आकार के कारण, मैं उन रुझानों को ढूंढने के लिए इसका उपयोग करने में असमर्थ हूं जिन्हें मैं ढूंढ रहा हूं।

dates = [20110101,20110104,20110105,20110106,20110107,20110108,20110111,20110112] 

zAxis0= [  0,  0,  0,  0,  0,  0,  0,  0] 
Actual= [ 1132, 1184, 1177,  950, 1066, 1098, 1116, 1211] 

zAxis1= [  1,  1,  1,  1,  1,  1,  1,  1] 
Tops1 = [ 1156, 1250, 1156, 1187, 1187, 1187, 1156, 1156] 
Mids1 = [ 1125, 1187, 1125, 1156, 1156, 1156, 1140, 1140] 
Lows1 = [ 1093, 1125, 1093, 1125, 1125, 1125, 1125, 1125] 

zAxis2= [  2,  2,  2,  2,  2,  2,  2,  2] 
Tops2 = [ 1125, 1125, 1125, 1125, 1125, 1250, 1062, 1250] 
Mids2 = [ 1062, 1062, 1062, 1062, 1062, 1125, 1000, 1125] 
Lows2 = [ 1000, 1000, 1000, 1000, 1000, 1000,  937, 1000] 

zAxis3= [  3,  3,  3,  3,  3,  3,  3,  3] 
Tops3 = [ 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250] 
Mids3 = [ 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187] 
Lows3 = [ 1125, 1125, 1000, 1125, 1125, 1093, 1093, 1000] 

import matplotlib.pyplot 
from mpl_toolkits.mplot3d import Axes3D 

fig = matplotlib.pyplot.figure() 
ax = fig.add_subplot(111, projection = '3d') 

#actual values 
ax.scatter(dates, zAxis0, Actual, color = 'c', marker = 'o') 

#Upper limits, Lower limts, and Mid-range for the FIRST plane 
ax.plot(dates, zAxis1, Tops1, color = 'r') 
ax.plot(dates, zAxis1, Mids1, color = 'y') 
ax.plot(dates, zAxis1, Lows1, color = 'b') 

#Upper limits, Lower limts, and Mid-range for the SECOND plane 
ax.plot(dates, zAxis2, Tops2, color = 'r') 
ax.plot(dates, zAxis2, Mids2, color = 'y') 
ax.plot(dates, zAxis2, Lows2, color = 'b') 

#Upper limits, Lower limts, and Mid-range for the THIRD plane 
ax.plot(dates, zAxis3, Tops3, color = 'r') 
ax.plot(dates, zAxis3, Mids3, color = 'y') 
ax.plot(dates, zAxis3, Lows3, color = 'b') 

#These two lines are just dummy data that plots transparent circles that 
#occpuy the "wall" behind my actual plots, so that the last plane appears 
#floating in 3D rather than being pasted to the plot's background 
zAxis4= [  4,  4,  4,  4,  4,  4,  4,  4] 
ax.scatter(dates, zAxis4, Actual, color = 'w', marker = 'o', alpha=0) 

matplotlib.pyplot.show() 

मुझे यह साजिश मिल रही है, लेकिन यह मुझे किसी भी सह-संबंध देखने में मदद नहीं करता है।

enter image description here मैं कोई गणितज्ञ या वैज्ञानिक नहीं हूं, इसलिए मुझे वास्तव में जो चाहिए वह मेरे डेटा को देखने के लिए फॉर्मेट चुनने में मदद करता है। Mplot3d में इसे दिखाने का कोई प्रभावी तरीका है? या आप मायावीस का उपयोग करेंगे? किसी भी मामले में, आप किस लाइब्रेरी और कक्षा (एसएस) का उपयोग करेंगे?

अग्रिम धन्यवाद।

+2

आप देख रहे हैं सहसंबंध के लिए, 3 डी का सबसे अच्छा तरीका नहीं हो सकता। परिप्रेक्ष्य व्याख्या के रास्ते में आता है। आप इसके बजाय पक्षपात चार्ट, प्लॉटिंग और स्कैटरप्लॉट्स का उपयोग करना चाह सकते हैं। – gauden

उत्तर

7

अपने प्रश्न (प्रोग्रामिंग नहीं) के विज़ुअलाइज़ेशन भाग पर टिप्पणी करने के लिए, मैंने आपके डेटा का पता लगाने के लिए उपयोग करने के विकल्पों का सुझाव देने के लिए कुछ उदाहरण पहचाने गए ग्राफों का मज़ाक उड़ाया है।

library("lubridate") 
library("ggplot2") 
library("reshape2") 

dates <- c("2011-01-01","2011-01-04","2011-01-05", 
      "2011-01-06","2011-01-07","2011-01-08", 
      "2011-01-11","2011-01-12") 
dates <- ymd(dates) 

Actual<- c( 1132, 1184, 1177,  950, 1066, 1098, 1116, 1211, 
       1132, 1184, 1177,  950, 1066, 1098, 1116, 1211, 
       1132, 1184, 1177,  950, 1066, 1098, 1116, 1211) 
z  <- c(  1,  1,  1,  1,  1,  1,  1,  1, 
        2,  2,  2,  2,  2,  2,  2,  2, 
        3,  3,  3,  3,  3,  3,  3,  3) 
Tops <- c( 1156, 1250, 1156, 1187, 1187, 1187, 1156, 1156, 
       1125, 1125, 1125, 1125, 1125, 1250, 1062, 1250, 
       1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250) 
Mids <- c( 1125, 1187, 1125, 1156, 1156, 1156, 1140, 1140, 
       1062, 1062, 1062, 1062, 1062, 1125, 1000, 1125, 
       1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187) 
Lows <- c( 1093, 1125, 1093, 1125, 1125, 1125, 1125, 1125, 
       1000, 1000, 1000, 1000, 1000, 1000,  937, 1000, 
       1125, 1125, 1000, 1125, 1125, 1093, 1093, 1000) 

df <- data.frame(cbind(z, dates, Actual, Tops, Mids, Lows)) 

dfm <- melt(df, id.vars=c("z", "dates", "Actual")) 

पहले उदाहरण में, पतली नीली रेखा वास्तविक मूल्य जेड कुल्हाड़ियों में से प्रत्येक में सभी तीन स्तरों पर आरोपित है।

p <- ggplot(data = dfm, 
      aes(x = dates, 
       y = value, 
       group = variable, 
       colour = variable) 
      ) + geom_line(size = 3) + 
       facet_grid(variable ~ z) + 
       geom_point(aes(x = dates, 
           y = Actual), 
          colour = "steelblue", 
          size = 3) + 
           geom_line(aes(x = dates, 
              y = Actual), 
             colour = "steelblue", 
             size = 1) + 
              theme_bw() 
p 

line charts

दूसरे सेट में, प्रत्येक पैनल जेड कुल्हाड़ियों में से प्रत्येक में तीन स्तरों (शीर्ष, मध्य, कम) के खिलाफ वास्तविक मूल्य का एक scatterplot है।

p <- ggplot(data = dfm, 
      aes(x = Actual, 
       y = value, 
       group = variable, 
       colour = variable) 
      ) + geom_point(size = 3) + 
       geom_smooth() + 
       facet_grid(variable ~ z) + 
       theme_bw() 
p 

correlation

+0

धन्यवाद, गॉडन। दूसरे सेट के बारे में (भूरे रंग के लिफाफे के साथ एक भूखंड के साथ), इस तरह का चार्ट आर में क्या जाना जाता है? और क्या आप पाइथन/matplotlib समकक्ष का नाम पता करेंगे? मैं [matplotlib की गैलरी] देख रहा हूं (http://matplotlib.sourceforge.net/gallery.html) और ऐसा कुछ भी प्रतीत नहीं होता है। – Zambi

+1

@Zambi मुझे आर कोड पोस्ट करने में खुशी है। संभावित उत्तरों की संख्या में जोड़ने के लिए आप अपने प्रश्न में 'आर' टैग जोड़ना चाह सकते हैं। मुझे यकीन नहीं है कि दूसरी साजिश का एक विशिष्ट नाम है। यह दो चर (जेड अक्ष और स्तर) द्वारा पहचाने गए स्कैटरप्लॉट्स का एक सेट है। रेखा एक फिट 'लोस 'वक्र है और क्लाउड मानक त्रुटि का प्रतिनिधित्व करता है। मैं इसका उत्पादन करने के लिए ['ggplot2' पैकेज] (http://had.co.nz/ggplot2/) का उपयोग करता हूं। – gauden

+2

सबसेट में डेटा तोड़ने और 2 डी सबप्लॉट्स के ग्रिड की साजिश रचने के इस दृष्टिकोण के लिए कुछ आम नाम "पहलू" (ggplot [विकम]) या "छोटे गुणक" (टफटे) या "कंडीशनिंग प्लॉट" हैं, जो अक्सर "कोप्पल" (जाली/ट्रेल्स [क्लीवलैंड, चैंबर, सरकार]) प्रयोग के लिए –

2

धन्यवाद, gauden। आर वास्तव में मेरे शोध का हिस्सा था, और मैंने स्थापित किया है लेकिन ट्यूटोरियल के साथ अभी तक पर्याप्त नहीं हुआ है। जब तक यह StackOverFlow नियमों के विरुद्ध नहीं है, मैं आपके आर कोड को देखने की सराहना करता हूं।

मैंने पहले से ही 2 डी प्रस्तुतियों की कोशिश की है, लेकिन कई मामलों में टॉप 1/टॉप 2/टॉप 3 (और इसी तरह के लिए निम्न) के मान बराबर होंगे, इसलिए लाइनें ओवरलैपिंग और एक दूसरे को अस्पष्ट करती हैं। यही कारण है कि मैं 3 डी विकल्प की कोशिश कर रहा हूँ। 2 डी ग्राफ के 3 पैनलों का आपका विचार एक अच्छा सुझाव है जिसे मैंने नहीं खोजा था।

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

मैंने matplotlib's Wireframe example को अपनाने का प्रयास किया है लेकिन मुझे जो प्लॉट मिल रहा है वह बिल्कुल वायरफ़्रेम जैसा नहीं दिखता है।

यह है कि मैं क्या डेटा तत्वों (Tops1 और Tops2) के सिर्फ दो के साथ enter image description here नीचे कोड से हो रही है है:

dates = [20110101,20110104,20110105,20110106,20110107,20110108,20110111,20110112] 

zAxis0= [  0,  0,  0,  0,  0,  0,  0,  0] 
Actual= [ 1132, 1184, 1177,  950, 1066, 1098, 1116, 1211] 

zAxis1= [  1,  1,  1,  1,  1,  1,  1,  1] 
Tops1 = [ 1156, 1250, 1156, 1187, 1187, 1187, 1156, 1156] 
Mids1 = [ 1125, 1187, 1125, 1156, 1156, 1156, 1140, 1140] 
Lows1 = [ 1093, 1125, 1093, 1125, 1125, 1125, 1125, 1125] 

zAxis2= [  2,  2,  2,  2,  2,  2,  2,  2] 
Tops2 = [ 1125, 1125, 1125, 1125, 1125, 1250, 1062, 1250] 
Mids2 = [ 1062, 1062, 1062, 1062, 1062, 1125, 1000, 1125] 
Lows2 = [ 1000, 1000, 1000, 1000, 1000, 1000,  937, 1000] 

zAxis3= [  3,  3,  3,  3,  3,  3,  3,  3] 
Tops3 = [ 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250] 
Mids3 = [ 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187] 
Lows3 = [ 1125, 1125, 1000, 1125, 1125, 1093, 1093, 1000] 

import matplotlib.pyplot 
from mpl_toolkits.mplot3d import Axes3D 

fig = matplotlib.pyplot.figure() 
ax = fig.add_subplot(111, projection = '3d') 

####example code from: http://matplotlib.sourceforge.net/mpl_toolkits/mplot3d/tutorial.html#wireframe-plots 
#from mpl_toolkits.mplot3d import axes3d 
#import matplotlib.pyplot as plt 
#import numpy as np 

#fig = plt.figure() 
#ax = fig.add_subplot(111, projection='3d') 
#X, Y, Z = axes3d.get_test_data(0.05) 
#ax.plot_wireframe(X, Y, Z, rstride=10, cstride=10) 

#plt.show() 

X, Y, Z = dates, Tops1, Tops2 
ax.plot_wireframe(X, Y, Z, rstride=1, cstride=1, color = 'g') 

matplotlib.pyplot.show() 
+0

+1। मुझे उम्मीद है कि दूसरे मदद करने के लिए कदम उठाएंगे और मैंने सवाल उठाने के लिए सवाल उठाया है कि क्या उभरता है। – gauden

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

  • कोई संबंधित समस्या नहीं^_^