Answers:
您将需要做一些手动格式设置工作,因为Excel没有您想要的数字格式。
1-自定义数字格式
右键单击轴编号,选择“格式化轴”,转到“数字”部分,然后输入以下自定义格式:
"10^"#
使您的轴使用此自定义格式。
这会将文本“ 10 ^”添加到任何显示的数字的前面。
2-登录数据
1)中的自定义格式假定您的数据已被记录。因此,我们需要记录您的数据,并对其进行图形化处理。查找每个数据点的日志:
Data
X Y Log10(X) Log10(Y)
30 300 1.477121255 2.477121255
28 300 1.447158031 2.477121255
26 300 1.414973348 2.477121255
300 200 2.477121255 2.301029996
280 200 2.447158031 2.301029996
260 200 2.414973348 2.301029996
使您的绘图图右边两列。
3-修复日志行
Excel日志图假定主要日志行应位于1、10、100、1000等。但是,由于已经记录了数据,因此您希望主要行位于1、2、3。
因此,我们需要制作自己的线条,并将其设置为细灰色线条。
首先,在制作自己的图时,从图中删除网格线。
然后,每隔10、100、1000等添加指定每行起点和终点的数据点对,然后记录数据。在每对点之间放置空格以断开线,还可以更轻松地查看正在发生的情况。您应该得到一个像这样的表:
Lines
X Y Log(X) Log(Y)
10 10 1.0 1.0
10 100000 1.0 5.0
20 10 1.3 1.0
20 100000 1.3 5.0
30 10 1.5 1.0
30 100000 1.5 5.0
40 10 1.6 1.0
40 100000 1.6 5.0
50 10 1.7 1.0
50 100000 1.7 5.0
60 10 1.8 1.0
60 100000 1.8 5.0
70 10 1.8 1.0
70 100000 1.8 5.0
80 10 1.9 1.0
80 100000 1.9 5.0
90 10 2.0 1.0
90 100000 2.0 5.0
100 10 2.0 1.0
100 100000 2.0 5.0
200 10 2.3 1.0
200 100000 2.3 5.0
300 10 2.5 1.0
300 100000 2.5 5.0
400 10 2.6 1.0
400 100000 2.6 5.0
500 10 2.7 1.0
500 100000 2.7 5.0
600 10 2.8 1.0
600 100000 2.8 5.0
700 10 2.8 1.0
700 100000 2.8 5.0
800 10 2.9 1.0
800 100000 2.9 5.0
900 10 3.0 1.0
900 100000 3.0 5.0
1000 10 3.0 1.0
1000 100000 3.0 5.0
10 100 1.0 2.0
10000 100 4.0 2.0
10 200 1.0 2.3
10000 200 4.0 2.3
10 300 1.0 2.5
10000 300 4.0 2.5
10 400 1.0 2.6
10000 400 4.0 2.6
10 500 1.0 2.7
10000 500 4.0 2.7
10 600 1.0 2.8
10000 600 4.0 2.8
10 700 1.0 2.8
10000 700 4.0 2.8
10 800 1.0 2.9
10000 800 4.0 2.9
10 900 1.0 3.0
10000 900 4.0 3.0
10 1000 1.0 3.0
10000 1000 4.0 3.0
10 2000 1.0 3.3
10000 2000 4.0 3.3
10 3000 1.0 3.5
10000 3000 4.0 3.5
10 4000 1.0 3.6
10000 4000 4.0 3.6
10 5000 1.0 3.7
10000 5000 4.0 3.7
10 6000 1.0 3.8
10000 6000 4.0 3.8
10 7000 1.0 3.8
10000 7000 4.0 3.8
10 8000 1.0 3.9
10000 8000 4.0 3.9
10 9000 1.0 4.0
10000 9000 4.0 4.0
10 10000 1.0 4.0
10000 10000 4.0 4.0
将Log(x)和Log(y)列作为数据系列添加到绘图中,然后设置数据系列的格式以不显示任何点,而是显示细灰色线。
4-轴标签
添加任何数据标签,图例等,就完成了。
因此,方法是沿每个轴在想要轴标签的位置添加虚拟序列。隐藏这些点,并添加数据标签,放入101、102等(对于10 ^ 1、10 ^ 2等),并格式化要上标的指数。手动操作很麻烦,因为除其他困难外,很难选择指数并应用格式。
所以我写了一些例行程序。选择一个在轴的左边缘和下边缘具有对数的对数图,然后运行以下代码。
Sub NiceExponentialAxisLabels()
Dim cht As Chart
Dim iPt As Long, iLog As Long, iMin As Long, iMax As Long
Dim vXVals As Variant, vYVals As Variant
Dim dFont As Double
Set cht = ActiveChart
' HORIZONTAL AXIS ------------------------------------
cht.Axes(xlCategory).TickLabels.NumberFormat = ";;;" ' hide tick labels
' build arrays of X and Y values
iMin = WorksheetFunction.Log10(cht.Axes(xlCategory).MinimumScale)
iMax = WorksheetFunction.Log10(cht.Axes(xlCategory).MaximumScale)
ReDim vXVals(1 To 1)
ReDim vYVals(1 To 1)
iPt = 0
For iLog = iMin To iMax
iPt = iPt + 1
ReDim Preserve vXVals(1 To iPt)
ReDim Preserve vYVals(1 To iPt)
vXVals(iPt) = 10 ^ iLog
vYVals(iPt) = cht.Axes(xlValue).MinimumScale
Next
' add series, hide points, add and format labels
With cht.SeriesCollection.NewSeries
.Name = "horizontal"
.XValues = vXVals
.Values = vYVals
.Format.Line.Visible = False
.MarkerStyle = xlMarkerStyleNone
.HasDataLabels = True
.DataLabels.Position = xlLabelPositionBelow
For iPt = 1 To .Points.Count
With .DataLabels(iPt)
dFont = .Font.Size
.Text = 10 & WorksheetFunction.Log10(vXVals(iPt))
With .Characters(3, Len(.Text) - 2)
.Font.Superscript = True
.Font.Size = dFont + 2
End With
With .Characters(1, 2)
.Font.Size = dFont
End With
End With
Next
End With
' VERTICAL AXIS ------------------------------------
cht.Axes(xlValue).TickLabels.NumberFormat = "_0_0_0_0_0_0_0" ' hide but maintain margin
' build arrays of X and Y values
iMin = WorksheetFunction.Log10(cht.Axes(xlValue).MinimumScale)
iMax = WorksheetFunction.Log10(cht.Axes(xlValue).MaximumScale)
ReDim vXVals(1 To 1)
ReDim vYVals(1 To 1)
iPt = 0
For iLog = iMin To iMax
iPt = iPt + 1
ReDim Preserve vXVals(1 To iPt)
ReDim Preserve vYVals(1 To iPt)
vXVals(iPt) = cht.Axes(xlCategory).MinimumScale
vYVals(iPt) = 10 ^ iLog
Next
' add series, hide points, add and format labels
With cht.SeriesCollection.NewSeries
.Name = "vertical"
.XValues = vXVals
.Values = vYVals
.Format.Line.Visible = False
.MarkerStyle = xlMarkerStyleNone
.HasDataLabels = True
.DataLabels.Position = xlLabelPositionLeft
For iPt = 1 To .Points.Count
With .DataLabels(iPt)
dFont = .Font.Size
.Text = 10 & WorksheetFunction.Log10(vYVals(iPt))
With .Characters(3, Len(.Text) - 2)
.Font.Superscript = True
.Font.Size = dFont + 2
End With
With .Characters(1, 2)
.Font.Size = dFont
End With
End With
Next
End With
End Sub
注意:可以从此处复制代码,然后粘贴到常规代码模块中。如果您以前没有做过,请参阅我的博客上的方法:使用其他人的宏。
下面是两个图表,一个是原始图表,另一个是带有漂亮指数标签的图表。