PDA

View Full Version : อยากให้ Graph ออกมาเป็นแบบนี้คะ



anntiant
25 May 2007, 16:07
จากไฟล์แนบ excel สามารถทำกราฟออกเป็นแบบในไฟล์แนบได้มั้ยคะ

สมเกียรติ
25 May 2007, 20:04
ยังคิดไม่ออกครับว่าจะทำอย่างไรให้เส้นที่ซ้อนกับแท่งกราฟนั้น มีตำแหน่งเริ่มจากกึ่งกลางของยอดแต่ละแท่ง

anntiant
28 May 2007, 00:04
มีใครพอจะเคยทำบ้าง รบกวนบอกวิธีหน่อยคะ

ขอบคุณมากคะ

anntiant
28 May 2007, 14:35
การให้ทำให้ออกมาเป็นกราฟแบบนี้ พอจะมีทางเป็นไปได้มั้ยคะ :confused:

anntiant
28 May 2007, 15:30
http://home.ched.coventry.ac.uk/Volume/vol0/polygon.htm
ลิงค์เพิ่มเติมคะ ว่ากราฟควรจะต้องออกมาแบบกราฟด้านขวา(ในลิงค์)
ให้กราฟออกมาเป็นแบบฮิสโตแกรมแล้วเส้นที่อยู่จุดกึ่งกลางของกราฟแท่งจะเรียกว่า
polygon of frequency คะ

ช่วยหน่อยนะคะ ขอบคุณคะ

chatchat
28 May 2007, 17:20
ผมไม่เคยทำกราฟแบบนี้ แต่เท่าที่ลองๆทำดู ก็ได้ประมาณแบบใน ไฟล์แนบนี้นะครับ
ท่านใดจะแนะนำเพิ่มเติมส่วนไหนก็ยินดีครับ

anntiant
29 May 2007, 07:56
ผมไม่เคยทำกราฟแบบนี้ แต่เท่าที่ลองๆทำดู ก็ได้ประมาณแบบใน ไฟล์แนบนี้นะครับ
ท่านใดจะแนะนำเพิ่มเติมส่วนไหนก็ยินดีครับ

จากในไฟล์ที่แนบมา พอเราสร้างกราฟแท่ง (column) แล้วก็เลือก XY Scatter
ต้องเลือกยังไงคะที่จะให้กราฟทั้งสองอันอยู่ในอันเดียวกัน

ขอบคุณมากนะคะ

anntiant
29 May 2007, 10:03
ไฟล์ที่แนบนี้เป็นไฟล์ที่หนูลองทำ ช่วยดูให้หน่อยคะ
ทำแล้วไม่ได้สักทีคะ

anntiant
29 May 2007, 10:30
ไฟล์ที่แนบนี้เป็นไฟล์ที่หนูลองทำ ช่วยดูให้หน่อยคะ
ทำแล้วไม่ได้สักทีคะ

ทำได้แล้วคะ หนูลองเข้าไปใน source data แล้วลบ name และ x-values ใน series นั้นก็ได้แล้วคะ
ขอบคุณ คุณ chatchat มากนะคะ
แต่ว่าการทำกราฟแบบนี้จะมีวิธีที่เมื่อสร้างกราฟเส้น แล้วให้แต่ละจุดไปอยู่ที่กึ่งกลางยอดแต่ละแท่งเลยมั้ยคะ ถ้าใครทราบช่วยแนะนำด้วยคะ
(คือกราฟที่หนูทำได้ จะต้องมาจัดให้แต่ละจุดอยู่กึ่งกลางเอง)

chatchat
29 May 2007, 21:18
ผมก็ทำแบบนั้นล่ะครับ ก็อย่างที่ออกตัวไว้ ว่าไม่เคยสร้างกราฟแบบนี้ ก็เลยต้อง manual เอาเอง ถ้าเราใช้งานไม่บ่อยมาก หรือกราฟมีไม่มากเท่าไหร่ วิธีนี้ก็พอช่วยได้น่ะครับ

Sumon
30 May 2007, 13:11
ทำได้แล้วคะ หนูลองเข้าไปใน source data แล้วลบ name และ x-values ใน series นั้นก็ได้แล้วคะ
ขอบคุณ คุณ chatchat มากนะคะ
แต่ว่าการทำกราฟแบบนี้จะมีวิธีที่เมื่อสร้างกราฟเส้น แล้วให้แต่ละจุดไปอยู่ที่กึ่งกลางยอดแต่ละแท่งเลยมั้ยคะ ถ้าใครทราบช่วยแนะนำด้วยคะ
(คือกราฟที่หนูทำได้ จะต้องมาจัดให้แต่ละจุดอยู่กึ่งกลางเอง)

ถ้าเป็นกราฟแบบแท่ง "แท่งเดียว" สามารถให้แต่ละจุดไปอยู่ที่กึ่งกลางยอดแต่ละแท่งเลยครับ (โปรดดูตัวอย่างไฟล์ประกอบ)

สมเกียรติ
31 May 2007, 14:10
คิดออกแล้วครับ สร้างยากหน่อย

ออกแบบตารางข้อมูลให้เว้นเยื้องกัน
สร้างกราฟแบบ Line
Tools > Options > Chart > Interpolated
copy B3 : D13 นำไป Paste Special แบบ Add Series บนกราฟซ้ำ
กำหนด Chart Type สำหรับเส้นกราฟที่ได้จากข้อ 4 เป็นแบบ Column
Format Data Series ของกราฟแท่ง > Options > Overlap 100 และ Gap 0
ตัด Legend ที่แสดงชื่อเส้นกราฟแท่งทิ้งไป

anntiant
1 Jun 2007, 15:00
ขอบคุณ อาจารย์สมเกียรติ มากนะคะ

rundim
2 Jun 2007, 09:15
ถ้าใช้ VBA ก้อตามนี้เลยครับ

Sub Chart()
Sheets("Sheet1").Select
Range("A1").Select
A = 0
B = 0
Do 'COUNT COLUMN
z = ActiveCell.Offset(0, 1).Select
z = ActiveCell.Value
A = A + 1
Loop While z <> 0
A = A - 1
ActiveCell.Offset(0, -1).Select
Do 'COUNT LOW
z = ActiveCell.Offset(1, 0).Select
z = ActiveCell.Value
B = B + 1
Loop While z <> 0
Charts.Add
ActiveChart.ChartType = xlColumnClustered

Do
z = z + 1
ActiveChart.SeriesCollection.NewSeries
If z > A Then ActiveChart.Legend.LegendEntries(A + 1).Delete Else ActiveChart.SeriesCollection(z).Name = "=Sheet1!R1C" & z + 1
ActiveChart.SeriesCollection(z).XValues = "=Sheet1!R2C1:R" & B & "C1"
Loop While z <> A * 2

box = Sheet1.Cells(1, 1).Value
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = box
End With
xx = 2
zz = 0.5
mm = 1
Do
x = "=Sheet1!R2C" & xx & ":R" & B & "C" & xx
xx = xx + 1
cxx = cxx + 1
If cxx <= A Then
ActiveChart.SeriesCollection(cxx).Values = x
End If
If cxx > A Then
mm = mm + 1
x2 = "Sheet1!R2C" & mm & ":R" & B & "C" & mm
ab = 0
poitx = 1
asf = zz + (1 / (A * 2)) + asg
asd = "{" & asf
Do
asd = asd & "," & (asf + poitx)
poitx = poitx + 1
ab = ab + 1
Loop While ab <> B - 2
asd = asd & "}"
ActiveChart.SeriesCollection(cxx).ChartType = xlXYScatterLines
ActiveChart.SeriesCollection(cxx).Formula = "=SERIES(," & asd & "," & x2 & "," & cxx & ")"
asg = (1 / A) + asg
End If
Loop While cxx <> A * 2
With ActiveChart.ChartGroups(1)
.Overlap = 0
.GapWidth = 0
.HasSeriesLines = False
End With
ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1"
End Sub

เรื่องตัวแปลอาจจะตั้งมั่วๆไปนิด ถ้าจะให้เข้าใจง่ายก้อลองศึกษา แล้วก้อเปลี่ยนชื่อตัวแปลให้สื่อถึง step งานนั้น ก้อจะทำให้ง่ายต่อการแก้ไขในภายหลังนะครับ :)

ปล. ถ้าว่างงานก้อจะมาตอบให้ทีนะครับ

anntiant
2 Jun 2007, 17:40
ขอบคุณ คุณ rundim มากนะคะ
สำหรับการเขียน code