本人初來乍到,專業上有這樣的資料,需要繪圖,希望大神指點
資料大概為
1000 600 852.6 -600
1000 500 569.43 -965
1000 700 852.6 -1456.2
1000 900 569.43 -939.4
1000 1085 2348.9 521.78
...
1500 600 852.6 -600
1500 500 569.9 345.9
1500 700 852.6 -1456.2
1500 900 569.43 -939.4
1500 1085 2348.9 521.78
...
若干個這樣的點,一個點一個點的畫
第一列為標識,第二列為橫軸,第三列第四列都為縱軸,畫在上下兩個畫布上
第二列橫軸有時順序亂的,需要先排序,有什么好的排序原始碼嗎,vb.net的,謝謝大家了
uj5u.com熱心網友回復:

你這樣的“描述”,全靠別人去猜你究竟想要什么樣的效果…………
uj5u.com熱心網友回復:
就是畫曲線,簡單說就是兩列數字畫線,這里傳不了附件和圖uj5u.com熱心網友回復:
可以發圖片好不!
“回復”編輯框上方,第6個圖示就是插入圖片的。
這論壇是沒有“附件”功能。目前建議“用網盤分享”方式來達到目的。
操作方法,參考這個帖子中,9樓的回復:
http://bbs.csdn.net/topics/392193811
在那個帖子9樓中,我也是“有圖片”的。
uj5u.com熱心網友回復:
好的,我晚上電腦上詳細敘述下uj5u.com熱心網友回復:
你自己理解的和描述的 估計不一回事uj5u.com熱心網友回復:
類似股票 滬指 深指 兩條折線uj5u.com熱心網友回復:

大家好,我想要獲得這樣的圖,資料時這樣的

資料是上面這樣的,橫軸為第三列的頻率,哪位大神指點下

本人就用一個點的資料劃出了這樣的圖,但是對于很多個點還是不會

For n = 0 To nfreq - 1
STN(n) = LTrim(Mid(rowDataStr(n + 5), 5, 8))
fr(n) = LTrim(Mid(rowDataStr(n + 5), 14, 11))
r(n) = LTrim(Mid(rowDataStr(n + 5), 37, 10))
ph(n) = LTrim(Mid(rowDataStr(n + 5), 48, 7))
Chart1.Series("Res").Points.AddXY(Log10(fr(n)), Log10(r(n)))
Chart2.Series("Phase").Points.AddXY(Log10(fr(n)), ph(n))
Next
uj5u.com熱心網友回復:
Chart2.ChartAreas.Clear() '清除所有繪圖區Chart2.Legends.Clear() '清除 圖例說明
Dim newChartAreas2 As New ChartArea("Default") '新增繪圖區
Chart2.ChartAreas.Add(newChartAreas2)
Dim newLegends2 As New Legend(legendName) '新增 圖例說明
Chart2.Legends.Add(newLegends2)
Chart2.ChartAreas("Default").Position.Height = 100 '繪圖區域所占百分比
Chart2.ChartAreas("Default").Position.Width = 100
Chart2.ChartAreas("Default").AxisX.Title = "Freq(Hz)" 'X軸名稱
Chart2.ChartAreas("Default").AxisX.TitleAlignment = StringAlignment.Center 'X軸標題位置
Chart2.ChartAreas("Default").AxisY.Title = "Phase" 'Y軸名稱
Chart2.ChartAreas("Default").AxisY.TitleAlignment = StringAlignment.Center 'Y軸標題位置
Chart2.ChartAreas("Default").AxisX.Minimum = -5
Chart2.ChartAreas("Default").AxisX.Maximum = 5
Chart2.ChartAreas("Default").AxisX.LabelStyle.Format = "0.00" 'X軸 顯示格式
Chart2.ChartAreas("Default").AxisX.MajorGrid.Enabled = True
Chart2.ChartAreas("Default").AxisX.MajorGrid.Interval = 1
Chart2.ChartAreas("Default").AxisX.MajorGrid.LineColor = Color.LightGray
Chart2.ChartAreas("Default").AxisX.MinorGrid.Enabled = True '啟用 次輔助線 功能
Chart2.ChartAreas("Default").AxisX.MinorGrid.Interval = 0.2 '次輔助線 間距為10
Chart2.ChartAreas("Default").AxisX.MinorGrid.LineColor = Color.LightSlateGray '次輔助線顏色為灰色
'Chart1.ChartAreas("Default").AxisX.Interval = 1 'Y軸的 主線間距major
Chart2.ChartAreas("Default").AxisX.MajorGrid.LineColor = Color.White
'Y軸的 數值區間
Chart2.ChartAreas("Default").AxisY.Minimum = -3141
Chart2.ChartAreas("Default").AxisY.Maximum = 3141
'Y軸的 數值間隔
Chart2.ChartAreas("Default").AxisY.MinorTickMark.IntervalOffset = 0
Chart2.ChartAreas("Default").AxisY.MajorGrid.Enabled = True
Chart2.ChartAreas("Default").AxisY.MajorGrid.Interval = 1000
Chart2.ChartAreas("Default").AxisY.MajorGrid.LineColor = Color.LightGray
Chart2.ChartAreas("Default").AxisY.MinorGrid.Enabled = True '啟用 次輔助線 功能
Chart2.ChartAreas("Default").AxisY.MinorGrid.Interval = 200 '次輔助線 間距為10
Chart2.ChartAreas("Default").AxisY.MinorGrid.LineColor = Color.LightSlateGray '次輔助線顏色為灰色
Chart2.ChartAreas("Default").AxisY.Interval = 500 'Y軸的 主線間距major
Chart2.ChartAreas("Default").AxisY.MajorGrid.LineColor = Color.White
Chart2.Series.Clear() '清除所有資料集
Dim newSeries2 As New Series("Phase")
newSeries2.ChartType = SeriesChartType.Point
newSeries2.BorderWidth = 2
newSeries2.Color = Color.Green
newSeries2.XValueType = ChartValueType.Double
newSeries2.IsValueShownAsLabel = False
newSeries2.MarkerStyle = MarkerStyle.Square
Chart2.Series.Add(newSeries2)
這是我用Chart畫圖得的代碼,哪位大神幫我指點下,

哪位大神愿意指點的加我qq 327553229 發資料示例,謝謝
uj5u.com熱心網友回復:
你的需求看得人滿眼金星。X軸本來就是自動排序的呀。不要把點保存到陣列,直接填充datatable,前兩列作為篩選條件創建dataview,根據第一列決定系結dataview到哪個area,根據第二列決定把點放到哪個series
uj5u.com熱心網友回復:
或者用linq,根據條件從總表里抽出不同的datarow,再進行系結uj5u.com熱心網友回復:
不會用datatable,linq也不會用,有代碼貼上來嗎,我想在畫圖之前對資料排序uj5u.com熱心網友回復:
listbox和datagridview是用來查看資料的,可以刪掉。Chart畫圖的一些細節你再看著美化一下吧,所有設定我都用的默認。Public Class Form1
Dim ds As New DataSet
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'Dim strData As String = IO.File.ReadAllText("C:\data\xxx.txt", System.Text.Encoding.UTF8) '從文本檔案里讀資料
Dim strData As String = "\ by amt
$ ASPACE= 100m
$ XMTR = 200.
skp Station Freq Comp Amps Resistivity Phase %Rho sPhz
\-++------++----------++---++----++---------++------++------++-----+
2 1270.0 1.0312E+04 ExHy 0.00 1.4241E+2 704.3 0.0 0.0
2 1270.0 8.2500E+03 ExHy 0.00 1.4058E+2 1099.1 0.0 0.0
2 1270.0 6.5625E+03 ExHy 0.00 1.1265E+2 383.3 0.0 0.0
2 1270.0 5.2500E+03 ExHy 0.00 1.5113E+2 424.2 0.0 0.0
2 1280.0 7.3242E+00 EyHx 0.00 1.1105E+3 -2702.9 4.6 45.7"
'skp Station Freq Comp Amps Resistivity Phase %Rho sPhz
For Each line As String In Split(Split(strData, $"+{vbCrLf}").Last, vbCrLf)
Dim d() As String = line.Split({" "}, StringSplitOptions.RemoveEmptyEntries)
Dim station As String = d(1)
'為每個station創建一個DataTable作為資料源,Chart控制元件作為展示
If Not ds.Tables.Contains(station) Then
Dim _chart As New DataVisualization.Charting.Chart()
With _chart '每個Chart控制元件有兩個Area
.Name = station
.Width=680
.ChartAreas.Clear()
.ChartAreas.Add("Resistivity")
.ChartAreas.Add("Phase")
.Titles.Add($"{station} - Resistivity").Alignment = ContentAlignment.TopCenter
.Titles.Add($"{station} - Phase").Alignment = ContentAlignment.TopCenter
.Titles(1).DockedToChartArea = "Phase"
End With
FlowLayoutPanel1.Controls.Add(_chart)
'格式化資料源
Dim table As DataTable = ds.Tables.Add(station)
With table.Columns
.Add("Freq", Type.GetType("System.Double"))
.Add("Comp")
.Add("Resistivity", Type.GetType("System.Double"))
.Add("Phase", Type.GetType("System.Double"))
End With
End If
ds.Tables(station).Rows.Add(d(2), d(3), d(5), d(6))
Next
'遍歷所有station,畫圖
For Each table As DataTable In ds.Tables
ListBox1.Items.Add(table.TableName)
'每個datable代表一個station,放到一個 chart里,Resistivity畫一個area,Phase畫一個area
Dim _chart As DataVisualization.Charting.Chart = CType(FlowLayoutPanel1.Controls().Item(table.TableName), DataVisualization.Charting.Chart)
_chart.Series.Add(New DataVisualization.Charting.Series("ExHy_Resistivity"))
_chart.Series.Add(New DataVisualization.Charting.Series("EyHx_Resistivity"))
_chart.Series.Add(New DataVisualization.Charting.Series("ExHy_Phase"))
_chart.Series.Add(New DataVisualization.Charting.Series("EyHx_Phase"))
For Each s As DataVisualization.Charting.Series In _chart.Series
s.ChartType = DataVisualization.Charting.SeriesChartType.Line
Next
'通過Comp列篩選所在area, 系結Freq到X軸,Resistivity和Phase到Y軸
With _chart.Series(0)
.ChartArea = "Resistivity"
.XValueMember = "Freq"
.Points.DataBind(
table.Rows.Cast(Of DataRow).
Where(Function(r) r("Comp") = "ExHy").
Select(Function(r) r), "Freq", "Resistivity", Nothing)
End With
With _chart.Series(1)
.ChartArea = "Resistivity"
.Points.DataBind(
table.Rows.Cast(Of DataRow).
Where(Function(r) r("Comp") = "EyHx").
Select(Function(r) r), "Freq", "Resistivity", Nothing)
End With
With _chart.Series(2)
.ChartArea = "Phase"
.XValueMember = "Freq"
.Points.DataBind(
table.Rows.Cast(Of DataRow).
Where(Function(r) r("Comp") = "ExHy").
Select(Function(r) r), "Freq", "Phase", Nothing)
End With
With _chart.Series(3)
.ChartArea = "Phase"
.Points.DataBind(
table.Rows.Cast(Of DataRow).
Where(Function(r) r("Comp") = "EyHx").
Select(Function(r) r), "Freq", "Phase", Nothing)
End With
Next
End Sub
Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
DataGridView1.DataSource = ds.Tables(ListBox1.SelectedItem)
End Sub
End Class
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/52836.html
標籤:資源
