I had the exact same issue. It is clearly a bug. Scheduling a training plan clearly isn't a fully transactional action and when it fails, it may leave your account in a "middle" state with calendar events (that you must delete one by one but can not fully get deleted since the begin and end will still stay there) but no Scheduled Training Plan.
It took some effort but I managed to get mine deleted but I am a web developer and this might be overly technical. Anyway, may help Garmin to identify the issue.
---
If you open the Garmin Connect website and use web browser (e.g. Chrome), open Inspector (right click and Inspect), go to Networking tab, change to Calendar page and the month that your training plan begins and look for a request with path or similar to /modern/proxy/calendar-service/year/2018/month/8, click it and go to Response tab and search for "trainingPlanId":
E.g. main was "trainingPlanId":33447745
Then I created and deleted a training to see what URL was called to delete it and it turned out to be GET request (shouldn't be, but anyway identified the API method). For me that was:
https://connect.garmin.com/modern/proxy/trainingplan-service/trainingplan/delete/33447745?_=1537705865506 (do not use it, replace the numbers)
Change the number 33447745 to what you found as trainingPlanId in your calendar events and the latter number seems to be running for each API call. So on the Network tab, just scroll to the very end and you probably see a request like count?_=1537705962513 (they seem to occur with some interval).
So take that number and add 1 and use that as the _=value on the previous URL and just open a new tab and go to that URL.