मैं विशिष्ट समुद्री ढांचे के चारों ओर व्हेल के वितरण के पैटर्न का अध्ययन कर रहा हूं।एक 3 डी प्लॉट में मिक्सिंग सतह और स्कैटरप्लॉट
- बेथीमेट्री एक सतह के रूप में (
x
= देशांतर,y
= अक्षांश,z
= गहराई), और - भौगोलिक स्थिति: मैं एक इंटरैक्टिव 3 डी साजिश एक ही समय में दिखा बनाने के लिए कोशिश कर रहा हूँ व्हेल समूह (
x
= देशांतर,y
= अक्षांश,z
= उदाहरण के लिए निश्चित गहराई -30 मीटर)।
समन्वय एक यूटीएम समन्वय प्रणाली में पेश किए जाते हैं।
मैं आमतौर पर आंकड़ों के उत्पादन के लिए आर और ggplot2
पैकेज के साथ काम करता हूं। यहां, plotly
पैकेज एक अच्छा विकल्प की तरह लग रहा था।
मैंने बाथमेट्री रास्टर bathy_ras
और अंक points
के डेटा.फ्रेम के साथ शुरू किया।
> bathy_ras
class : RasterLayer
dimensions : 784, 821, 643664 (nrow, ncol, ncell)
resolution : 102, 111 (x, y)
extent : 755070, 838812, -2612148, -2525124 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=utm +zone=58S +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0
data source : in memory
names : bathymetry
values : -1949.42, -34.27859 (min, max)
> str(points)
'data.frame': 214 obs. of 3 variables:
$ x: num 774264 777293 775476 773430 773284 ...
$ y: num -2534165 -2533556 -2531012 -2532904 -2533695 ...
$ z: num -30 -30 -30 -30 -30 -30 -30 -30 -30 -30 ...
मैं एक ही ग्राफ/एक ही धुरी पर मेरे दोनों डेटासेट संयोजित करने का उपाय नहीं मिल रहा। मैंने दो तरीकों की कोशिश की लेकिन किसी ने मुझे वह आउटपुट नहीं दिया जो मैं चाहता था।
1) प्लॉटली पैकेज का उपयोग करके रुस्तुडियो में साजिश बनाना।
#convert raster into a matrix of bathymetry values
bathy_matrix <- as.matrix(bathy_ras)
> str(bathy_matrix)
num [1:784, 1:821] -362 -365 -367 -369 -371 ...
#create interactive plot
p <- plot_ly(z=bathy_matrix, type="surface",showscale=FALSE)
#this works fine, it get a 3D interactive surface plot of the seabed
#but if I try to add the "points" layer it doesn't show on the plot
p <- plot_ly(z=bathy_matrix, type="surface",showscale=FALSE) %>%
add_trace(x = gp_seamounts_df$utmx, y = gp_seamounts_df$utmy, z = gp_seamounts_df$z, type = "scatter3d", mode = "markers", showscale=FALSE, opacity=0.98)
2) plotly वेबसाइट से पूरी तरह साजिश बना रहा है। सबसे पहले मैं (एक्स, वाई) एक मैट्रिक्स निर्देशांक के सभी बिंदुओं से युक्त और गहराई z
#convert raster into a dataframe
bathy_df <- as.data.frame(coordinates(bathy_ras))
bathy_df$z <- values(bathy_ras)
> str(bathy_df)
'data.frame': 643664 obs. of 3 variables:
$ x: num 755121 755223 755325 755427 755529 ...
$ y: num -2525179 -2525179 -2525179 -2525179 -2525179 ...
$ z: num -362 -361 -360 -359 -358 ...
में रेखापुंज "bathy_ras" परिवर्तित मैं एक plotly खाता बनाया था। मैंने अपने साजिश खाते में .txt फ़ाइलों के रूप में दो डेटाफ्रेम आयात किए: bathy_df
और points
।
यह साजिश खाते में दो ग्रिड बनाता है। मैं इन दो डेटा के लिए आसानी से दो अलग-अलग 3 डी प्लॉट लिख सकता हूं। फ्रेम: एक सतह की साजिश है (नीचे दिखाया गया है), दूसरा स्कैटरप्लॉट है। मैंने इस ट्यूटोरियल (http://help.plot.ly/update-a-graphs-data/) के बाद एक नए ट्रेस के रूप में सतही साजिश में स्कैटरप्लॉट को शामिल करने का प्रयास किया लेकिन स्कैटरप्लॉट 3 डी में होने पर "डालने" विकल्प को अनुपलब्ध लगता है। surface plot produced from the plotly web interface
क्या scatter3D
और plotly
में एक सतह साजिश को जोड़ना संभव है?
nb: मैं points()
साथ combinaison में raster::persp
कोशिश की, लेकिन मैं बहुत सतह साजिश है, जिसके कारण मैं plotly
और/या ggplot2
के साथ ऐसा करना पसंद करेंगे के सामान्य सौंदर्य से संतुष्ट नहीं हूं।
धन्यवाद alistaire, यह वास्तव में बहुत उपयोगी था। मेरे अंक के निर्देशांक मेरे मैट्रिक्स की सीमा में नहीं थे, यही कारण है कि वे साजिश पर दिखाई नहीं दे रहे थे। मुझे इन निर्देशांकों को शुरू करना पड़ा (शुरुआत में यूटीएम लैट/लांग, 'एक्सेंज = [755100: 838800] ',' यरेंज = [- 2612000, -2525000] ') मेरे मैट्रिक्स के आकार में (' Xrange = [1: ncol (bathy_matrix)] ',' yrange = [1: nrow (bathy_matrix)] ') plot_ly का उपयोग करने से पहले और फिर यह काम किया। –