在开始我的问题之前:我已经尝试了此社区中可用的公认解决方案(使用VBA excel(动态行、列)为每行创建折线图,并使用excel中的VBA宏为每行创建新图表)。对于这两种情况,我的图表都是用假设数据列的每一行创建的。
所以我有一个数据表,它通常具有从A1到F12的值。A列包含属性名称,如净利润、销售额、成本等,其时间进度图将被绘制。B2到F2行包含年份值。数据区域从B3到F12包含值。简而言之,每一行都是该特定属性的变化趋势。我想创建一个折线图来显示这种趋势(折线图中的每一行代表特定行中的值)。
我能够录制一个宏来做这件事
Worksheets("CashFlow").Activate
Range("B5:F7").Select
ActiveSheet.Shapes.AddChart2(227, xlLineMarkers).Select
ActiveChart.SetSourceData Source:=Range("'CashFlow'!$B$5:$F$7")
ActiveSheet.Shapes("Chart 1").IncrementLeft -26.25
ActiveSheet.Shapes("Chart 1").IncrementTop 133.5
ActiveWindow.ScrollRow = 2
ActiveWindow.SmallScroll Down:=5
ActiveChart.Axes(xlCategory).Select
ActiveChart.Axes(xlCategory).ReversePlotOrder = True
Application.CommandBars("Format Object").Visible = False
ActiveChart.SetElement (msoElementPrimaryValueAxisTitleAdjacentToAxis)
ActiveChart.Axes(xlValue, xlPrimary).AxisTitle.Text = "Cash (In Cr)"
Selection.Format.TextFrame2.TextRange.Characters.Text = "Cash (In Cr)"
With Selection.Format.TextFrame2.TextRange.Characters(1, 12).ParagraphFormat
.TextDirection = msoTextDirectionLeftToRight
.Alignment = msoAlignCenter
End With
With Selection.Format.TextFrame2.TextRange.Characters(1, 4).Font
.BaselineOffset = 0
.Bold = msoFalse
.NameComplexScript = "+mn-cs"
.NameFarEast = "+mn-ea"
.Fill.Visible = msoTrue
.Fill.ForeColor.RGB = RGB(89, 89, 89)
.Fill.Transparency = 0
.Fill.Solid
.Size = 10
.Italic = msoFalse
.Kerning = 12
.Name = "+mn-lt"
.UnderlineStyle = msoNoUnderline
.Strike = msoNoStrike
End With
With Selection.Format.TextFrame2.TextRange.Characters(5, 8).Font
.BaselineOffset = 0
.Bold = msoFalse
.NameComplexScript = "+mn-cs"
.NameFarEast = "+mn-ea"
.Fill.Visible = msoTrue
.Fill.ForeColor.RGB = RGB(89, 89, 89)
.Fill.Transparency = 0
.Fill.Solid
.Size = 10
.Italic = msoFalse
.Kerning = 12
.Name = "+mn-lt"
.UnderlineStyle = msoNoUnderline
.Strike = msoNoStrike
End With
ActiveChart.ChartArea.Select
ActiveChart.SetElement (msoElementChartTitleNone)
Application.CutCopyMode = False
Application.CutCopyMode = False
ActiveChart.FullSeriesCollection(1).XValues = "='CashFlow'!$B$2:$F$2"
然而,当我通过宏调用(VBA)实际运行此程序时,它是按列绘制的。
类似地,当我使用它们的代码片段时,上面链接的两个答案也按列绘制了图表。如何编写VBA子过程,通过假设数据是按行的方式绘制折线图。
试试这个:
ActiveChart.SetSourceData Source:=Range("'CashFlow'!$B$5:$F$7"), PlotBy:=xlRows
我还不能确定你的意图,但这里有一个例子。
Sub test()
Dim Ws As Worksheet
Dim rngDB As Range
Dim rngX As Range, rngY As Range
Dim i As Integer
Dim l As Single, t As Single
Dim w As Single, h As Single
Dim objChart As ChartObject
Set Ws = Sheets("CashFlow")
For Each objChart In Ws.ChartObjects
objChart.Delete
Next objChart
Set rngDB = Ws.Range("a2")
l = 1 'left
t = Ws.Range("a14").Top 'top
w = 400 'width
h = 200 'height
For i = 1 To 10
Set rngX = rngDB.Offset(0, 1).Resize(1, 5)
Set rngY = rngDB.Offset(i, 1).Resize(1, 5)
addmyCharts Ws, rngX, rngY, l, t, w, h
t = t + h
Next i
End Sub
Private Sub addmyCharts(Ws As Worksheet, rngX As Range, rngY As Range, l As Single, t As Single, w As Single, h As Single)
Dim shp As Shape
Dim Cht As Chart
Dim Srs As Series
Set shp = Ws.Shapes.AddChart(xlLineMarkers, l, t, w, h)
Set Cht = shp.Chart
With Cht
.HasLegend = True
For Each Srs In .SeriesCollection
Srs.Delete
Next Srs
Set Srs = .SeriesCollection.NewSeries
With Srs
.XValues = rngX
.Values = rngY
End With
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Cash (In Cr)"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Cash (In Cr)"
End With
End Sub
Sub testChart()
Dim Ws As Worksheet
Dim rngDB As Range, Rng As Range
Dim rngX As Range, rngY As Range
Dim shp As Shape
Dim Cht As Chart
Dim Srs As Series
Dim l As Single, t As Single
Dim w As Single, h As Single
Dim objChart As ChartObject
Set Ws = Sheets("CashFlow")
For Each objChart In Ws.ChartObjects
objChart.Delete
Next objChart
Set rngDB = Ws.Range("a3: a12")
l = 1 'left
t = Ws.Range("a14").Top 'top
w = 400 'width
h = 200 'height
Set shp = Ws.Shapes.AddChart(xlLineMarkers, l, t, w, h)
Set Cht = shp.Chart
With Cht
.HasLegend = True
For Each Srs In .SeriesCollection
Srs.Delete
Next Srs
For Each Rng In rngDB
Set Srs = .SeriesCollection.NewSeries
Set rngX = Ws.Range("b2").Resize(1, 5)
Set rngY = Rng.Offset(0, 1).Resize(1, 5)
With Srs
.Name = Rng
.XValues = rngX
.Values = rngY
End With
Next Rng
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Cash (In Cr)"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Cash (In Cr)"
End With
End Sub
主要内容:示例可以使用类的方法在图像上绘制多段线。 以下是此方法的语法。 该方法接受以下参数 - mat - 表示要在其上绘制矩形的图像的对象。 pts - 包含类型的对象的对象。 isClosed - 指定折线的布尔型类型的参数是否为关闭的。 color - 表示矩形颜色的标量对象(BGR)。 thickness - 表示矩形厚度的整数; 默认情况下,厚度值为。 类的构造函数接受类的对象。 示例 以下程序演示
我想创建一个包含三条线(男性、女性、未知)的折线图。这是我的数据示例: 是否有一个选项,在图中自动创建三行或我需要循环通过数据和创建三个跟踪自己?到目前为止,这是我的代码:
主要内容:示例可以使用类的方法在图像上绘制凸多段线。 以下是此方法的语法。 该方法接受以下参数 - mat - 表示要在其上绘制矩形的图像的对象。 points - 一个对象,表示要在其间绘制凸多段线的点。 color - 表示矩形颜色的标量对象(BGR)。 类的构造函数接受类的对象。 示例 以下程序演示如何在图像上绘制凸多段线并使用JavaFX窗口显示它。 在执行上述程序时,您将得到以下输出 -
本文向大家介绍Android绘制动态折线图,包括了Android绘制动态折线图的使用技巧和注意事项,需要的朋友参考一下 所谓动态折线图,就是折线图能随着手指的滑动进行动态绘制,这里很定会产生动画效果。基于这个效果,这里使用SurfaceView进行制图。 实现步奏如下: (1): 这里新建一个绘图ChartView,继承SurfaceView并实现SurfaceHolder.Callback ,
问题内容: 在我的程序中,我想绘制一个简单的分数线图。我有一个文本文件,并且在每一行上是一个整数分数,我已阅读该分数,并希望将其作为参数传递给图形类。我在实现graph类时遇到了一些麻烦,我所看到的所有示例都将它们的方法和它们的main放在同一个类中,而我不会。 我希望能够将数组传递给对象并生成图形,但是在调用我的绘画方法时,它要求我提供Graphics g …这是到目前为止的内容: 现在,我已经
我试图画一个三次线图,如下所示: 使用MPAndroid图表库。 我能画线,但不能画X轴和线之间的填充,如图所示。 已经经历了库和许多这样的问题。